From e63cdda04dbe40ff28ff729af46c0c52d1916a47 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:32:24 +0000 Subject: [PATCH 1/9] Formatted user.json file --- test/user.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/user.json b/test/user.json index 2c57a9ed..5fdc8e86 100644 --- a/test/user.json +++ b/test/user.json @@ -1 +1,5 @@ -{"USERNAME": "mikedeboertest", "PASSWORD": "test1324", "REPO": "github"} +{ + "USERNAME": "mikedeboertest", + "PASSWORD": "test1324", + "REPO": "github" +} \ No newline at end of file From 6c503e2e11f8dde408ca0f68033c5b2fca27016f Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 28 Nov 2015 16:32:21 +0000 Subject: [PATCH 2/9] Updated dependencies and devDependencies --- package.json | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 01a8ec3f..e9d4cb0c 100644 --- a/package.json +++ b/package.json @@ -4,30 +4,38 @@ "description": "A higher-level wrapper around the Github API.", "main": "github.js", "dependencies": { - "js-base64": "^2.1.8", - "xmlhttprequest": "~1.7.0" + "axios": "^0.9.0", + "base-64": "^0.1.0", + "es6-promise": "^3.0.2", + "utf8": "^2.1.1" }, "devDependencies": { - "chai": "^3.4.0", + "browserify": "^13.0.0", + "chai": "^3.4.1", "codecov": "^1.0.1", + "del": "^2.2.0", "gulp": "^3.9.0", - "gulp-jscs": "^3.0.1", - "gulp-jscs-stylish": "^1.2.1", - "gulp-jshint": "^1.11.2", + "gulp-jscs": "^3.0.2", + "gulp-jscs-stylish": "^1.3.0", + "gulp-jshint": "^2.0.0", "gulp-rename": "^1.2.2", - "gulp-uglify": "^1.4.2", - "istanbul": "^0.3.13", - "jshint": "^2.5.8", - "jshint-stylish": "^2.0.1", - "karma": "^0.13.14", + "gulp-sourcemaps": "^1.6.0", + "gulp-uglify": "^1.5.1", + "istanbul": "^0.4.2", + "jshint": "^2.9.1", + "jshint-stylish": "^2.1.0", + "karma": "^0.13.19", + "karma-browserify": "^4.4.2", "karma-chai": "^0.1.0", "karma-coverage": "^0.5.3", - "karma-json-fixtures-preprocessor": "0.0.5", - "karma-mocha": "^0.2.0", - "karma-mocha-reporter": "^1.1.1", - "karma-phantomjs-launcher": "^0.2.1", + "karma-json-fixtures-preprocessor": "0.0.6", + "karma-mocha": "^0.2.1", + "karma-mocha-reporter": "^1.1.5", + "karma-phantomjs-launcher": "^0.2.3", "karma-sauce-launcher": "^0.3.0", - "mocha": "^2.3.3" + "mocha": "^2.3.4", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" }, "scripts": { "test": "gulp test && gulp lint", From 759dadd8fc910aac1d87f07e6a907622d513e94b Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:47:43 +0000 Subject: [PATCH 3/9] Integrated axios --- bower.json | 2 +- package.json | 6 +- github.js => src/github.js | 397 ++++++++++++++++++------------------- 3 files changed, 199 insertions(+), 206 deletions(-) rename github.js => src/github.js (73%) diff --git a/bower.json b/bower.json index fc1f8c17..a0f4d1d3 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name":"github-api", - "main":"github.js", + "main":"src/github.js", "homepage":"https://github.com/michael/github", "authors":[ "Sergey Klimov (http://darvin.github.com/)" diff --git a/package.json b/package.json index e9d4cb0c..348913df 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "github-api", "version": "0.10.7", "description": "A higher-level wrapper around the Github API.", - "main": "github.js", + "main": "src/github.js", "dependencies": { "axios": "^0.9.0", "base-64": "^0.1.0", @@ -60,9 +60,5 @@ "gitHead": "aa8aa3c8cd5ce5240373d4fd1d06a7ab4af41a36", "bugs": { "url": "https://github.com/michael/github/issues" - }, - "browser": { - "xmlhttprequest": false, - "base64": false } } diff --git a/github.js b/src/github.js similarity index 73% rename from github.js rename to src/github.js index 9e73e9fc..33a5fec4 100644 --- a/github.js +++ b/src/github.js @@ -3,42 +3,37 @@ * * @copyright (c) 2013 Michael Aufreiter, Development Seed * Github.js is freely distributable. - *de + * * @license Licensed under BSD-3-Clause-Clear * * For all details and documentation: * http://substance.io/michael/github */ -(function (root, factory) { - 'use strict'; +'use strict'; - /* istanbul ignore next */ +(function (root, factory) { if (typeof define === 'function' && define.amd) { - define(['xmlhttprequest', 'js-base64'], function (XMLHttpRequest, b64encode) { - return (root.Github = factory(XMLHttpRequest.XMLHttpRequest, b64encode.Base64.encode)); + define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) { + return (root.Github = factory(Promise, Base64, Utf8, axios)); }); } else if (typeof module === 'object' && module.exports) { - if (typeof window !== 'undefined') { // jscs:ignore - module.exports = factory(window.XMLHttpRequest, window.btoa); - } else { // jscs:ignore - module.exports = factory(require('xmlhttprequest').XMLHttpRequest, require('js-base64').Base64.encode); - } + module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios')); } else { - var b64encode = function(str) { - return root.btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { - return String.fromCharCode('0x' + p1); - })); - }; + root.Github = factory(root.Promise, root.base64, root.utf8, root.axios); + } +}(this, function(Promise, Base64, Utf8, axios) { + function b64encode(string) { + return Base64.encode(Utf8.encode(string)); + } - root.Github = factory(root.XMLHttpRequest, b64encode); + if (Promise.polyfill) { + Promise.polyfill(); } -}(this, function (XMLHttpRequest, b64encode) { - 'use strict'; // Initial Setup // ------------- - var Github = function(options) { + var Github = function (options) { var API_URL = options.apiUrl || 'https://api.github.com'; // HTTP Request Abstraction @@ -46,88 +41,83 @@ // // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec. - var _request = Github._request = function _request(method, path, data, cb, raw, sync) { + var _request = Github._request = function _request(method, path, data, cb, raw) { function getURL() { var url = path.indexOf('//') >= 0 ? path : API_URL + path; url += ((/\?/).test(url) ? '&' : '?'); if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for(var param in data) { + for (var param in data) { if (data.hasOwnProperty(param)) - url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); + url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); } } - return url.replace(/(×tamp=\d+)/, '') + - (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); + return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : ''); } - var xhr = new XMLHttpRequest(); - - xhr.open(method, getURL(), !sync); - - if (!sync) { - xhr.onreadystatechange = function () { - if (this.readyState === 4) { - if (this.status >= 200 && this.status < 300 || this.status === 304) { - cb(null, raw ? this.responseText : this.responseText ? JSON.parse(this.responseText) : true, this); - } else { - cb({ - path: path, request: this, error: this.status - }); - } - } - }; - } - - if (!raw) { - xhr.dataType = 'json'; - xhr.setRequestHeader('Accept', 'application/vnd.github.v3+json'); - } else { - xhr.setRequestHeader('Accept', 'application/vnd.github.v3.raw+json'); - } - - xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + var config = { + headers: { + Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', + 'Content-Type': 'application/json;charset=UTF-8' + }, + method: method, + data: data ? data : {}, + url: getURL() + }; if ((options.token) || (options.username && options.password)) { - var authorization = options.token ? 'token ' + options.token : - 'Basic ' + b64encode(options.username + ':' + options.password); - - xhr.setRequestHeader('Authorization', authorization); + config.headers['Authorization'] = options.token ? + 'token ' + options.token : + 'Basic ' + b64encode(options.username + ':' + options.password); } - if (data) { - xhr.send(JSON.stringify(data)); - } else { - xhr.send(); - } - - if (sync) { - return xhr.response; - } + return axios(config) + .then(function (response) { + cb( + null, + raw ? JSON.stringify(response.data) : response.data || true, + response + ); + }, function (response) { + if (response.status === 304) { + cb( + null, + response.data || true, + response + ); + } else { + cb({ + path: path, + request: response.data, + error: response.status + }); + } + }); }; var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) { var results = []; (function iterate() { - _request('GET', path, null, function(err, res, xhr) { + _request('GET', path, null, function (err, res, xhr) { if (err) { return cb(err); } results.push.apply(results, res); - var next = (xhr.getResponseHeader('link') || '') - .split(';') - .filter(function(part) { - return part.search(/rel="next"/) !== -1; - }) - .map(function(part) { - return part.match(/<(.+?)>/)[1]; - }) - .pop(); + var links = (xhr.headers.link || '').split(/\s*,\s*/g); + var next = null; + + links.forEach(function (link) { + next = /rel="next"/.test(link) ? link : next; + }); + + if (next) { + next = (/<(.*)>/.exec(next) || [])[1]; + } if (!next) { cb(err, results); @@ -142,8 +132,8 @@ // User API // ======= - Github.User = function() { - this.repos = function(options, cb) { + Github.User = function () { + this.repos = function (options, cb) { if (arguments.length === 1 && typeof arguments[0] === 'function') { cb = options; options = {}; @@ -156,7 +146,7 @@ params.push('type=' + encodeURIComponent(options.type || 'all')); params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '1000')); // jscs:ignore + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore if (options.page) { params.push('page=' + encodeURIComponent(options.page)); @@ -170,21 +160,21 @@ // List user organizations // ------- - this.orgs = function(cb) { + this.orgs = function (cb) { _request('GET', '/user/orgs', null, cb); }; // List authenticated user's gists // ------- - this.gists = function(cb) { + this.gists = function (cb) { _request('GET', '/gists', null, cb); }; // List authenticated user's unread notifications // ------- - this.notifications = function(options, cb) { + this.notifications = function (options, cb) { if (arguments.length === 1 && typeof arguments[0] === 'function') { cb = options; options = {}; @@ -236,7 +226,7 @@ // Show user information // ------- - this.show = function(username, cb) { + this.show = function (username, cb) { var command = username ? '/users/' + username : '/user'; _request('GET', command, null, cb); @@ -245,17 +235,17 @@ // List user repositories // ------- - this.userRepos = function(username, cb) { + this.userRepos = function (username, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/repos?type=all&per_page=1000&sort=updated', cb); + _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb); }; // List user starred repositories // ------- - this.userStarred = function(username, cb) { + this.userStarred = function (username, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/starred?type=all&per_page=1000', function(err, res) { + _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) { cb(err, res); }); }; @@ -263,14 +253,14 @@ // List a user's gists // ------- - this.userGists = function(username, cb) { + this.userGists = function (username, cb) { _request('GET', '/users/' + username + '/gists', null, cb); }; // List organization repositories // ------- - this.orgRepos = function(orgname, cb) { + this.orgRepos = function (orgname, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb); }; @@ -278,20 +268,20 @@ // Follow user // ------- - this.follow = function(username, cb) { + this.follow = function (username, cb) { _request('PUT', '/user/following/' + username, null, cb); }; // Unfollow user // ------- - this.unfollow = function(username, cb) { + this.unfollow = function (username, cb) { _request('DELETE', '/user/following/' + username, null, cb); }; // Create a repo // ------- - this.createRepo = function(options, cb) { + this.createRepo = function (options, cb) { _request('POST', '/user/repos', options, cb); }; }; @@ -299,7 +289,7 @@ // Repository API // ======= - Github.Repository = function(options) { + Github.Repository = function (options) { var repo = options.name; var user = options.user; var fullname = options.fullname; @@ -318,6 +308,13 @@ sha: null }; + // Delete a repo + // -------- + + this.deleteRepo = function (cb) { + _request('DELETE', repoPath, options, cb); + }; + // Uses the cache if branch has not been changed // ------- @@ -326,7 +323,7 @@ return cb(null, currentTree.sha); } - that.getRef('heads/' + branch, function(err, sha) { + that.getRef('heads/' + branch, function (err, sha) { currentTree.branch = branch; currentTree.sha = sha; cb(err, sha); @@ -336,8 +333,8 @@ // Get a particular reference // ------- - this.getRef = function(ref, cb) { - _request('GET', repoPath + '/git/refs/' + ref, null, function(err, res, xhr) { + this.getRef = function (ref, cb) { + _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) { if (err) { return cb(err); } @@ -354,7 +351,7 @@ // "sha": "827efc6d56897b048c772eb4087f854f46256132" // } - this.createRef = function(options, cb) { + this.createRef = function (options, cb) { _request('POST', repoPath + '/git/refs', options, cb); }; @@ -364,8 +361,8 @@ // Repo.deleteRef('heads/gh-pages') // repo.deleteRef('tags/v1.0') - this.deleteRef = function(ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, function(err, res, xhr) { + this.deleteRef = function (ref, cb) { + _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) { cb(err, res, xhr); }); }; @@ -373,22 +370,22 @@ // Create a repo // ------- - this.createRepo = function(options, cb) { + this.createRepo = function (options, cb) { _request('POST', '/user/repos', options, cb); }; // Delete a repo // -------- - this.deleteRepo = function(cb) { + this.deleteRepo = function (cb) { _request('DELETE', repoPath, options, cb); }; // List all tags of a repository // ------- - this.listTags = function(cb) { - _request('GET', repoPath + '/tags', null, function(err, tags, xhr) { + this.listTags = function (cb) { + _request('GET', repoPath + '/tags', null, function (err, tags, xhr) { if (err) { return cb(err); } @@ -400,7 +397,7 @@ // List all pull requests of a respository // ------- - this.listPulls = function(options, cb) { + this.listPulls = function (options, cb) { options = options || {}; var url = repoPath + '/pulls'; var params = []; @@ -442,7 +439,7 @@ url += '?' + params.join('&'); } - _request('GET', url, null, function(err, pulls, xhr) { + _request('GET', url, null, function (err, pulls, xhr) { if (err) return cb(err); cb(null, pulls, xhr); }); @@ -451,8 +448,8 @@ // Gets details for a specific pull request // ------- - this.getPull = function(number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, function(err, pull, xhr) { + this.getPull = function (number, cb) { + _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) { if (err) return cb(err); cb(null, pull, xhr); }); @@ -461,8 +458,8 @@ // Retrieve the changes made between base and head // ------- - this.compare = function(base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, function(err, diff, xhr) { + this.compare = function (base, head, cb) { + _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) { if (err) return cb(err); cb(null, diff, xhr); }); @@ -471,10 +468,10 @@ // List all branches of a repository // ------- - this.listBranches = function(cb) { - _request('GET', repoPath + '/git/refs/heads', null, function(err, heads, xhr) { + this.listBranches = function (cb) { + _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { if (err) return cb(err); - cb(null, heads.map(function(head) { + cb(null, heads.map(function (head) { return head.ref.replace(/^refs\/heads\//, ''); }), xhr); }); @@ -483,15 +480,15 @@ // Retrieve the contents of a blob // ------- - this.getBlob = function(sha, cb) { + this.getBlob = function (sha, cb) { _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); }; // For a given file path, get the corresponding sha (blob for files, tree for dirs) // ------- - this.getCommit = function(branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, function(err, commit, xhr) { + this.getCommit = function (branch, sha, cb) { + _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) { if (err) return cb(err); cb(null, commit, xhr); }); @@ -500,10 +497,10 @@ // For a given file path, get the corresponding sha (blob for files, tree for dirs) // ------- - this.getSha = function(branch, path, cb) { + this.getSha = function (branch, path, cb) { if (!path || path === '') return that.getRef('heads/' + branch, cb); _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), - null, function(err, pathContent, xhr) { + null, function (err, pathContent, xhr) { if (err) return cb(err); cb(null, pathContent.sha, xhr); }); @@ -512,15 +509,15 @@ // Get the statuses for a particular SHA // ------- - this.getStatuses = function(sha, cb) { + this.getStatuses = function (sha, cb) { _request('GET', repoPath + '/statuses/' + sha, null, cb); }; // Retrieve the tree a commit points to // ------- - this.getTree = function(tree, cb) { - _request('GET', repoPath + '/git/trees/' + tree, null, function(err, res, xhr) { + this.getTree = function (tree, cb) { + _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { if (err) return cb(err); cb(null, res.tree, xhr); }); @@ -529,7 +526,7 @@ // Post a new blob object, getting a blob SHA back // ------- - this.postBlob = function(content, cb) { + this.postBlob = function (content, cb) { if (typeof (content) === 'string') { content = { content: content, @@ -542,7 +539,7 @@ }; } - _request('POST', repoPath + '/git/blobs', content, function(err, res) { + _request('POST', repoPath + '/git/blobs', content, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -551,20 +548,20 @@ // Update an existing tree adding a new blob object getting a tree SHA back // ------- - this.updateTree = function(baseTree, path, blob, cb) { + this.updateTree = function (baseTree, path, blob, cb) { var data = { base_tree: baseTree, tree: [ - { - path: path, - mode: '100644', - type: 'blob', - sha: blob - } - ] + { + path: path, + mode: '100644', + type: 'blob', + sha: blob + } + ] }; - _request('POST', repoPath + '/git/trees', data, function(err, res) { + _request('POST', repoPath + '/git/trees', data, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -574,10 +571,10 @@ // with a new blob SHA getting a tree SHA back // ------- - this.postTree = function(tree, cb) { + this.postTree = function (tree, cb) { _request('POST', repoPath + '/git/trees', { tree: tree - }, function(err, res) { + }, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -587,10 +584,10 @@ // and the new tree SHA, getting a commit SHA back // ------- - this.commit = function(parent, tree, message, cb) { + this.commit = function (parent, tree, message, cb) { var user = new Github.User(); - user.show(null, function(err, userData) { + user.show(null, function (err, userData) { if (err) return cb(err); var data = { message: message, @@ -599,12 +596,12 @@ email: userData.email }, parents: [ - parent + parent ], tree: tree }; - _request('POST', repoPath + '/git/commits', data, function(err, res) { + _request('POST', repoPath + '/git/commits', data, function (err, res) { if (err) return cb(err); currentTree.sha = res.sha; // Update latest commit cb(null, res.sha); @@ -615,10 +612,10 @@ // Update the reference of your head to point to the new commit SHA // ------- - this.updateHead = function(head, commit, cb) { + this.updateHead = function (head, commit, cb) { _request('PATCH', repoPath + '/git/refs/heads/' + head, { sha: commit - }, function(err) { + }, function (err) { cb(err); }); }; @@ -626,7 +623,7 @@ // Show repository information // ------- - this.show = function(cb) { + this.show = function (cb) { _request('GET', repoPath, null, cb); }; @@ -642,11 +639,11 @@ if (xhr.status === 202) { setTimeout( - function () { - that.contributors(cb, retry); - }, - retry - ); + function () { + that.contributors(cb, retry); + }, + retry + ); } else { cb(err, data, xhr); } @@ -656,7 +653,7 @@ // Get contents // -------- - this.contents = function(ref, path, cb) { + this.contents = function (ref, path, cb) { path = encodeURI(path); _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { ref: ref @@ -666,28 +663,28 @@ // Fork repository // ------- - this.fork = function(cb) { + this.fork = function (cb) { _request('POST', repoPath + '/forks', null, cb); }; // List forks // -------- - this.listForks = function(cb) { + this.listForks = function (cb) { _request('GET', repoPath + '/forks', null, cb); }; // Branch repository // -------- - this.branch = function(oldBranch, newBranch, cb) { + this.branch = function (oldBranch, newBranch, cb) { if (arguments.length === 2 && typeof arguments[1] === 'function') { cb = newBranch; newBranch = oldBranch; oldBranch = 'master'; } - this.getRef('heads/' + oldBranch, function(err, ref) { + this.getRef('heads/' + oldBranch, function (err, ref) { if (err && cb) return cb(err); that.createRef({ ref: 'refs/heads/' + newBranch, @@ -699,51 +696,51 @@ // Create pull request // -------- - this.createPullRequest = function(options, cb) { + this.createPullRequest = function (options, cb) { _request('POST', repoPath + '/pulls', options, cb); }; // List hooks // -------- - this.listHooks = function(cb) { + this.listHooks = function (cb) { _request('GET', repoPath + '/hooks', null, cb); }; // Get a hook // -------- - this.getHook = function(id, cb) { + this.getHook = function (id, cb) { _request('GET', repoPath + '/hooks/' + id, null, cb); }; // Create a hook // -------- - this.createHook = function(options, cb) { + this.createHook = function (options, cb) { _request('POST', repoPath + '/hooks', options, cb); }; // Edit a hook // -------- - this.editHook = function(id, options, cb) { + this.editHook = function (id, options, cb) { _request('PATCH', repoPath + '/hooks/' + id, options, cb); }; // Delete a hook // -------- - this.deleteHook = function(id, cb) { + this.deleteHook = function (id, cb) { _request('DELETE', repoPath + '/hooks/' + id, null, cb); }; // Read file at given path // ------- - this.read = function(branch, path, cb) { + this.read = function (branch, path, cb) { _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), - null, function(err, obj, xhr) { + null, function (err, obj, xhr) { if (err && err.error === 404) return cb('not found', null, null); if (err) return cb(err); @@ -754,8 +751,8 @@ // Remove a file // ------- - this.remove = function(branch, path, cb) { - that.getSha(branch, path, function(err, sha) { + this.remove = function (branch, path, cb) { + that.getSha(branch, path, function (err, sha) { if (err) return cb(err); _request('DELETE', repoPath + '/contents/' + path, { message: path + ' is removed', @@ -772,19 +769,19 @@ // Move a file to a new location // ------- - this.move = function(branch, path, newPath, cb) { - updateTree(branch, function(err, latestCommit) { - that.getTree(latestCommit + '?recursive=true', function(err, tree) { + this.move = function (branch, path, newPath, cb) { + updateTree(branch, function (err, latestCommit) { + that.getTree(latestCommit + '?recursive=true', function (err, tree) { // Update Tree - tree.forEach(function(ref) { + tree.forEach(function (ref) { if (ref.path === path) ref.path = newPath; if (ref.type === 'tree') delete ref.sha; }); - that.postTree(tree, function(err, rootTree) { - that.commit(latestCommit, rootTree, 'Deleted ' + path , function(err, commit) { - that.updateHead(branch, commit, function(err) { + that.postTree(tree, function (err, rootTree) { + that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { + that.updateHead(branch, commit, function (err) { cb(err); }); }); @@ -796,13 +793,13 @@ // Write file contents to a given branch and path // ------- - this.write = function(branch, path, content, message, options, cb) { + this.write = function (branch, path, content, message, options, cb) { if (typeof cb === 'undefined') { cb = options; options = {}; } - that.getSha(branch, encodeURI(path), function(err, sha) { + that.getSha(branch, encodeURI(path), function (err, sha) { var writeOptions = { message: message, content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, @@ -824,7 +821,7 @@ // until: ISO 8601 date - only commits before this date will be returned // ------- - this.getCommits = function(options, cb) { + this.getCommits = function (options, cb) { options = options || {}; var url = repoPath + '/commits'; var params = []; @@ -876,14 +873,14 @@ // Gists API // ======= - Github.Gist = function(options) { + Github.Gist = function (options) { var id = options.id; var gistPath = '/gists/' + id; // Read the gist // -------- - this.read = function(cb) { + this.read = function (cb) { _request('GET', gistPath, null, cb); }; @@ -899,49 +896,49 @@ // } // } - this.create = function(options, cb) { + this.create = function (options, cb) { _request('POST', '/gists', options, cb); }; // Delete the gist // -------- - this.delete = function(cb) { + this.delete = function (cb) { _request('DELETE', gistPath, null, cb); }; // Fork a gist // -------- - this.fork = function(cb) { + this.fork = function (cb) { _request('POST', gistPath + '/fork', null, cb); }; // Update a gist with the new stuff // -------- - this.update = function(options, cb) { + this.update = function (options, cb) { _request('PATCH', gistPath, options, cb); }; // Star a gist // -------- - this.star = function(cb) { + this.star = function (cb) { _request('PUT', gistPath + '/star', null, cb); }; // Untar a gist // -------- - this.unstar = function(cb) { + this.unstar = function (cb) { _request('DELETE', gistPath + '/star', null, cb); }; // Check if a gist is starred // -------- - this.isStarred = function(cb) { + this.isStarred = function (cb) { _request('GET', gistPath + '/star', null, cb); }; }; @@ -949,13 +946,13 @@ // Issues API // ========== - Github.Issue = function(options) { + Github.Issue = function (options) { var path = '/repos/' + options.user + '/' + options.repo + '/issues'; - this.list = function(options, cb) { + this.list = function (options, cb) { var query = []; - for(var key in options) { + for (var key in options) { if (options.hasOwnProperty(key)) { query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key])); } @@ -964,10 +961,10 @@ _requestAllPages(path + '?' + query.join('&'), cb); }; - this.comment = function(issue, comment, cb) { + this.comment = function (issue, comment, cb) { _request('POST', issue.comments_url, { body: comment - }, function(err, res) { + }, function (err, res) { cb(err, res); }); }; @@ -976,23 +973,23 @@ // Search API // ========== - Github.Search = function(options) { + Github.Search = function (options) { var path = '/search/'; var query = '?q=' + options.query; - this.repositories = function(options, cb) { + this.repositories = function (options, cb) { _request('GET', path + 'repositories' + query, options, cb); }; - this.code = function(options, cb) { + this.code = function (options, cb) { _request('GET', path + 'code' + query, options, cb); }; - this.issues = function(options, cb) { + this.issues = function (options, cb) { _request('GET', path + 'issues' + query, options, cb); }; - this.users = function(options, cb) { + this.users = function (options, cb) { _request('GET', path + 'users' + query, options, cb); }; }; @@ -1000,44 +997,44 @@ return Github; }; - // Top Level API - // ------- +// Top Level API +// ------- - Github.getIssues = function(user, repo) { + Github.getIssues = function (user, repo) { return new Github.Issue({ - user: user, repo: repo + user: user, + repo: repo }); }; - Github.getRepo = function(user, repo) { + Github.getRepo = function (user, repo) { if (!repo) { - var fullname = user; - return new Github.Repository({ - fullname: fullname + fullname: user }); } else { return new Github.Repository({ - user: user, name: repo + user: user, + name: repo }); } }; - Github.getUser = function() { + Github.getUser = function () { return new Github.User(); }; - Github.getGist = function(id) { + Github.getGist = function (id) { return new Github.Gist({ id: id }); }; - Github.getSearch = function(query) { + Github.getSearch = function (query) { return new Github.Search({ query: query }); }; return Github; -})); +})); \ No newline at end of file From bb0cc57baa128d43e6a17fc0e6040dd205f138be Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:55:19 +0000 Subject: [PATCH 4/9] Tests updated --- src/github.js | 2 +- test/test.auth.js | 26 +++++++------------------- test/test.issue.js | 19 ++++--------------- test/test.repo.js | 29 ++++++++--------------------- test/test.search.js | 13 ++----------- test/test.user.js | 16 +++------------- 6 files changed, 25 insertions(+), 80 deletions(-) diff --git a/src/github.js b/src/github.js index 33a5fec4..b7a9f0b0 100644 --- a/src/github.js +++ b/src/github.js @@ -77,7 +77,7 @@ .then(function (response) { cb( null, - raw ? JSON.stringify(response.data) : response.data || true, + response.data || true, response ); }, function (response) { diff --git a/test/test.auth.js b/test/test.auth.js index af93d28f..be7138c2 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -1,22 +1,11 @@ 'use strict'; -var testUser, github, user; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, user; describe('Github constructor', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -36,21 +25,20 @@ describe('Github constructor', function() { describe('Github constructor (failing case)', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: 'fake124', auth: 'basic' }); + user = github.getUser(); }); it('should fail authentication and return err', function(done) { user.notifications(function(err) { - err.request.status.should.equal(401, 'Return 401 status for bad auth'); - JSON.parse(err.request.responseText).message.should.equal('Bad credentials'); + err.error.should.equal(401, 'Return 401 status for bad auth'); + err.request.message.should.equal('Bad credentials'); done(); }); }); -}); +}); \ No newline at end of file diff --git a/test/test.issue.js b/test/test.issue.js index c261a58c..f3d6ceae 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -1,29 +1,18 @@ 'use strict'; -var testUser, github, issues; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, issues; describe('Github.Issue', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, auth: 'basic' }); - issues = github.getIssues('mikedeboertest', 'TestRepo'); + issues = github.getIssues(testUser.USERNAME, 'TestRepo'); }); it('should list issues', function(done) { diff --git a/test/test.repo.js b/test/test.repo.js index d5bab61f..d3cc3b7c 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -1,17 +1,10 @@ 'use strict'; -var github, repo, user, testUser, imageB64, imageBlob; +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, repo, user, imageB64, imageBlob; if (typeof window === 'undefined') { // We're in NodeJS - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); - var fs = require('fs'); var path = require('path'); @@ -46,8 +39,6 @@ if (typeof window === 'undefined') { // We're in NodeJS describe('Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -131,16 +122,16 @@ describe('Github.Repository', function() { it('should get statuses for a SHA from a repo', function(done) { repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses) { - statuses.length.should.equal(6) + statuses.length.should.equal(6); statuses.every(function(status) { - return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b' + return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; }).should.equal(true); done(); }); }); it('should get a SHA from a repo', function(done) { - repo.getSha('master', '.gitignore', function(err, sha) { + repo.getSha('master', '.gitignore', function(err) { should.not.exist(err); done(); }); @@ -157,12 +148,10 @@ describe('Github.Repository', function() { }); }); -var repoTest = Math.floor(Math.random() * (100000 - 0)) + 0; +var repoTest = Math.floor(Math.random() * 100000); describe('Creating new Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -399,7 +388,6 @@ describe('Creating new Github.Repository', function() { describe('deleting a Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -419,7 +407,6 @@ describe('deleting a Github.Repository', function() { describe('Repo returns commit errors correctly', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -432,7 +419,7 @@ describe('Repo returns commit errors correctly', function() { repo.commit('broken-parent-hash', 'broken-tree-hash', 'commit message', function(err) { should.exist(err); should.exist(err.request); - err.request.status.should.equal(422); + err.error.should.equal(422); done(); }); }); diff --git a/test/test.search.js b/test/test.search.js index a084d126..fe6868eb 100644 --- a/test/test.search.js +++ b/test/test.search.js @@ -1,20 +1,11 @@ 'use strict'; +var Github = require('../src/github.js'); +var testUser = require('./user.json'); var github; -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - var testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} - describe('Github.Search', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, diff --git a/test/test.user.js b/test/test.user.js index c4d3d77e..1205d9e6 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -1,21 +1,11 @@ 'use strict'; -var testUser, user, github; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, user; describe('Github.User', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, From 8a050694601cb1a77c757ce677dfa1ae3b276c20 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:55:50 +0000 Subject: [PATCH 5/9] Updated karma configuration --- karma.conf.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 226a0049..842e5dd2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -5,7 +5,8 @@ module.exports = function(config) { client: { captureConsole: true, mocha: { - timeout: 10000 + timeout: 10000, + ui: 'bdd' } }, @@ -15,10 +16,27 @@ module.exports = function(config) { autoWatch: false, - frameworks: ['mocha', 'chai'], + frameworks: [ + 'browserify', + 'mocha', + 'chai' + ], browsers: ['PhantomJS'], + browserify: { + debug: true + }, + + phantomjsLauncher: { + debug: true, + options: { + settings: { + webSecurityEnabled: false + } + } + }, + coverageReporter: { reporters: [ { From f4b8a6553fd62bc44a079fc886a9bed9abb83d60 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:56:06 +0000 Subject: [PATCH 6/9] Updated Gulp config file --- gulpfile.js | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index ce55e31e..800e05ad 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,7 +4,12 @@ var gulp = require('gulp'); var jshint = require('gulp-jshint'); var jscs = require('gulp-jscs'); var rename = require('gulp-rename'); +var browserify = require('browserify'); +var source = require('vinyl-source-stream'); +var buffer = require('vinyl-buffer'); var uglify = require('gulp-uglify'); +var sourcemaps = require('gulp-sourcemaps'); +var del = require('del'); var stylish = require('gulp-jscs-stylish'); var path = require('path'); var karma = require('karma'); @@ -15,24 +20,22 @@ function runTests(singleRun, isCI, done) { var files = [ path.join(__dirname, 'test/vendor/*.js'), // PhantomJS 1.x polyfills - path.join(__dirname, 'github.js'), + path.join(__dirname, 'src/github.js'), path.join(__dirname, 'test/test.*.js') ]; if (singleRun) { files.forEach(function(path) { - preprocessors[path] = ['coverage']; + preprocessors[path] = ['browserify', 'coverage']; }); reporters.push('coverage'); } - files.push(path.join(__dirname, 'test/user.json')); files.push({ pattern: path.join(__dirname, 'test/gh.png'), watched: false, included: false }); - preprocessors['test/user.json'] = ['json_fixtures']; var localConfig = { files: files, @@ -101,15 +104,40 @@ gulp.task('test:ci', function(done) { gulp.task('test:auto', function(done) { runTests(false, false, done); }); +gulp.task('clean', function () { + return del('dist/*'); +}); gulp.task('build', function() { - return gulp.src('github.js') + var browserifyInstance = browserify({ + debug: true, + entries: 'src/github.js', + standalone: 'Github' + }); + + browserifyInstance + .bundle() + .pipe(source('github.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({loadMaps: true})) + .pipe(uglify()) + .pipe(rename({ + extname: '.bundle.min.js' + })) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')); + + return gulp.src('src/github.js') + .pipe(sourcemaps.init()) + .pipe(rename({ + extname: '.min.js' + })) .pipe(uglify()) - .pipe(rename('github.min.js')) - .pipe(gulp.dest('dist/')); + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')); }); -gulp.task('default', function() { +gulp.task('default', ['clean'], function() { gulp.start('lint', 'test', 'build'); }); From 4247a8a95d6c0201032fc5c3557c3e2fb1a0f09d Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 13 Jan 2016 02:28:20 +0000 Subject: [PATCH 7/9] .jshintrc: Added "should" to the list of globals --- .jshintrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.jshintrc b/.jshintrc index 07f9a2da..d7c494f7 100644 --- a/.jshintrc +++ b/.jshintrc @@ -86,6 +86,7 @@ "globals" : { "require": false, "define": false, - "escape": false + "escape": false, + "should": false } // additional predefined global variables } From affd447e04f439a7396cfbe5f4c2c5ca1687b9bd Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 20 Jan 2016 00:57:30 +0000 Subject: [PATCH 8/9] Added distribution files --- dist/github.bundle.min.js | 2 ++ dist/github.bundle.min.js.map | 1 + dist/github.min.js | 2 ++ dist/github.min.js.map | 1 + 4 files changed, 6 insertions(+) create mode 100644 dist/github.bundle.min.js create mode 100644 dist/github.bundle.min.js.map create mode 100644 dist/github.min.js create mode 100644 dist/github.min.js.map diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js new file mode 100644 index 00000000..618b769f --- /dev/null +++ b/dist/github.bundle.min.js @@ -0,0 +1,2 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&l.status<300?t:n)(o),l=null}},o.isStandardBrowserEnv()){var p=e("./../helpers/cookies"),h=e("./../helpers/urlIsSameOrigin"),d=h(a.url)?p.read(a.xsrfCookieName||r.xsrfCookieName):void 0;d&&(f[a.xsrfHeaderName||r.xsrfHeaderName]=d)}if(o.forEach(f,function(e,t){c||"content-type"!==t.toLowerCase()?l.setRequestHeader(t,e):delete f[t]}),a.withCredentials&&(l.withCredentials=!0),a.responseType)try{l.responseType=a.responseType}catch(g){if("json"!==l.responseType)throw g}o.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},{"./../defaults":6,"./../helpers/buildUrl":7,"./../helpers/cookies":8,"./../helpers/parseHeaders":9,"./../helpers/transformData":11,"./../helpers/urlIsSameOrigin":12,"./../utils":13}],3:[function(e,t,n){"use strict";var r=e("./defaults"),o=e("./utils"),i=e("./core/dispatchRequest"),s=e("./core/InterceptorManager"),u=t.exports=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge({method:"get",headers:{},timeout:r.timeout,transformRequest:r.transformRequest,transformResponse:r.transformResponse},e),e.withCredentials=e.withCredentials||r.withCredentials;var t=[i,void 0],n=Promise.resolve(e);for(u.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),u.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};u.defaults=r,u.all=function(e){return Promise.all(e)},u.spread=e("./helpers/spread"),u.interceptors={request:new s,response:new s},function(){function e(){o.forEach(arguments,function(e){u[e]=function(t,n){return u(o.merge(n||{},{method:e,url:t}))}})}function t(){o.forEach(arguments,function(e){u[e]=function(t,n,r){return u(o.merge(r||{},{method:e,url:t,data:n}))}})}e("delete","get","head"),t("post","put","patch")}()},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/spread":10,"./utils":13}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":13}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{"undefined"!=typeof XMLHttpRequest||"undefined"!=typeof ActiveXObject?e("../adapters/xhr")(r,o,t):"undefined"!=typeof n&&e("../adapters/http")(r,o,t)}catch(i){o(i)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:16}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":13}],7:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t){if(!t)return e;var n=[];return o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),n.push(r(t)+"="+r(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}},{"./../utils":13}],8:[function(e,t,n){"use strict";var r=e("./../utils");t.exports={write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}},{"./../utils":13}],9:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":13}],10:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":13}],12:[function(e,t,n){"use strict";function r(e){var t=e;return s&&(u.setAttribute("href",t),t=u.href),u.setAttribute("href",t),{href:u.href,protocol:u.protocol?u.protocol.replace(/:$/,""):"",host:u.host,search:u.search?u.search.replace(/^\?/,""):"",hash:u.hash?u.hash.replace(/^#/,""):"",hostname:u.hostname,port:u.port,pathname:"/"===u.pathname.charAt(0)?u.pathname:"/"+u.pathname}}var o,i=e("./../utils"),s=/(msie|trident)/i.test(navigator.userAgent),u=document.createElement("a");o=r(window.location.href),t.exports=function(e){var t=i.isString(e)?r(e):e;return t.protocol===o.protocol&&t.host===o.host}},{"./../utils":13}],13:[function(e,t,n){"use strict";function r(e){return"[object Array]"===b.call(e)}function o(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"[object FormData]"===b.call(e)}function s(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function p(e){return"[object File]"===b.call(e)}function h(e){return"[object Blob]"===b.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(e){return"[object Arguments]"===b.call(e)}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function v(e,t){if(null!==e&&"undefined"!=typeof e){var n=r(e)||g(e);if("object"==typeof e||n||(e=[e]),n)for(var o=0,i=e.length;i>o;o++)t.call(null,e[o],o,e);else for(var s in e)e.hasOwnProperty(s)&&t.call(null,e[s],s,e)}}function y(){var e={};return v(arguments,function(t){v(t,function(t,n){e[n]=t})}),e}var b=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:v,merge:y,trim:d}},{}],14:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],15:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){J=e}function c(e){z=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){V(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;$>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}$=0}function m(){try{var e=t,n=e("vertx");return V=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){z(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,R(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,R(e,o))},e)}function _(e,t){t._state===oe?S(e,t._result):t._state===ie?R(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){R(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=w(t);n===se?R(e,se.error):void 0===n?S(e,t):s(n)?T(e,t,n):S(e,t)}}function C(e,t){e===t?R(e,y()):i(t)?A(e,t):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),O(e)}function S(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&z(O,e))}function R(e,t){e._state===re&&(e._state=ie,e._result=t,z(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&z(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return C(n,e),n}function H(e){var t=this,n=new t(v);return R(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||B(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var V,J,K,Y=X,$=0,z=({}.toString,function(e,t){ne[$]=e,ne[$+1]=t,$+=2,2===$&&(J?J(g):K())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);K=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;k.prototype._validateInput=function(e){return Y(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var ae=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?R(o,n):r._result[t]=n),0===r._remaining&&S(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=D,fe=q,le=L,pe=H,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=z,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];z(function(){G(r,o,s,i)})}else j(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:16}],16:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=w(t>>>10&1023|55296),t=56320|1023&t),o+=w(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return w(e>>t&63|128)}function c(e){if(0==(4294967168&e))return w(e);var t="";return 0==(4294965248&e)?t=w(e>>6&31|192):0==(4294901760&e)?(u(e),t=w(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=w(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=w(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[b];if(b++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(b>y)throw Error("Invalid byte index");if(b==y)return!1;if(e=255&v[b],b++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,b=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,b,w=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e)},function(e){304===e.status?u(null,e.data||!0,e):u({path:i,request:e.data,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.headers.link||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":14,"es6-promise":15,utf8:17}]},{},[18])(18)}); +//# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map new file mode 100644 index 00000000..77986dad --- /dev/null +++ b/dist/github.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/buildUrl.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/helpers/urlIsSameOrigin.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"defaults","utils","buildUrl","parseHeaders","transformData","resolve","reject","config","data","headers","transformRequest","requestHeaders","merge","common","method","isFormData","request","XMLHttpRequest","ActiveXObject","open","toUpperCase","url","params","timeout","onreadystatechange","readyState","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","isStandardBrowserEnv","cookies","urlIsSameOrigin","xsrfValue","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","withCredentials","isArrayBuffer","DataView","send","./../defaults","./../helpers/buildUrl","./../helpers/cookies","./../helpers/parseHeaders","./../helpers/transformData","./../helpers/urlIsSameOrigin","./../utils",3,"dispatchRequest","InterceptorManager","axios","arguments","chain","promise","Promise","interceptors","interceptor","unshift","fulfilled","rejected","push","then","shift","all","promises","spread","createShortMethods","createShortMethodsWithData","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/spread","./utils",4,"handlers","prototype","use","eject","id","fn","h",5,"process","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"encode","encodeURIComponent","parts","isArray","v","isDate","toISOString","join",8,"write","name","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",9,"parsed","split","line","trim","substr",10,"callback","arr","apply",11,"fns",12,"urlResolve","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","originUrl","test","navigator","userAgent","createElement","location","requestUrl",13,"toString","ArrayBuffer","isView","str","isArguments","obj","isArrayLike","hasOwnProperty","result","Object",14,"root","freeExports","freeModule","freeGlobal","InvalidCharacterError","message","error","TABLE","REGEX_SPACE_CHARACTERS","decode","input","String","bitStorage","bitCounter","output","position","fromCharCode","b","c","padding","charCodeAt","base64","version","nodeType",15,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",16,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","args","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",17,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",18,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","username","password","token","_requestAllPages","results","iterate","err","res","xhr","links","link","next","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n\n},{\"./../defaults\":6,\"./../helpers/buildUrl\":7,\"./../helpers/cookies\":8,\"./../helpers/parseHeaders\":9,\"./../helpers/transformData\":11,\"./../helpers/urlIsSameOrigin\":12,\"./../utils\":13}],3:[function(require,module,exports){\n'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/spread\":10,\"./utils\":13}],4:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n},{\"./../utils\":13}],5:[function(require,module,exports){\n(function (process){\n'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":16}],6:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n\n},{\"./utils\":13}],7:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n\n},{\"./../utils\":13}],8:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n\n},{\"./../utils\":13}],9:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n},{\"./../utils\":13}],10:[function(require,module,exports){\n'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n},{\"./../utils\":13}],12:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n\n},{\"./../utils\":13}],13:[function(require,module,exports){\n'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n},{}],14:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],15:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":16}],16:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],17:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],18:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":14,\"es6-promise\":15,\"utf8\":17}]},{},[18])(18)\n});\n\n","'use strict';\n\n/*global ActiveXObject:true*/\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar buildUrl = require('./../helpers/buildUrl');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n // Transform request data\n var data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Merge headers\n var requestHeaders = utils.merge(\n defaults.headers.common,\n defaults.headers[config.method] || {},\n config.headers || {}\n );\n\n if (utils.isFormData(data)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n // Create the request\n var request = new (XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');\n request.open(config.method.toUpperCase(), buildUrl(config.url, config.params), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function () {\n if (request && request.readyState === 4) {\n // Prepare the response\n var responseHeaders = parseHeaders(request.getAllResponseHeaders());\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config\n };\n\n // Resolve or reject the Promise based on the status\n (request.status >= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js new file mode 100644 index 00000000..3584af06 --- /dev/null +++ b/dist/github.min.js @@ -0,0 +1,2 @@ +"use strict";!function(t,n){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(e,o,s,i){return t.Github=n(e,o,s,i)}):"object"==typeof module&&module.exports?module.exports=n(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=n(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,n,e,o){function s(t){return n.encode(e.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var n=t.apiUrl||"https://api.github.com",e=i._request=function(e,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:n+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(e)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:e,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t)},function(t){304===t.status?r(null,t.data||!0,t):r({path:i,request:t.data,error:t.status})})},u=i._requestAllPages=function(t,n){var o=[];!function s(){e("GET",t,null,function(e,i,u){if(e)return n(e);o.push.apply(o,i);var r=(u.headers.link||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):n(e,o)})}()};return i.User=function(){this.repos=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),e("GET",o,null,n)},this.orgs=function(t){e("GET","/user/orgs",null,t)},this.gists=function(t){e("GET","/gists",null,t)},this.notifications=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),e("GET",o,null,n)},this.show=function(t,n){var o=t?"/users/"+t:"/user";e("GET",o,null,n)},this.userRepos=function(t,n){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",n)},this.userStarred=function(t,n){u("/users/"+t+"/starred?type=all&per_page=100",function(t,e){n(t,e)})},this.userGists=function(t,n){e("GET","/users/"+t+"/gists",null,n)},this.orgRepos=function(t,n){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",n)},this.follow=function(t,n){e("PUT","/user/following/"+t,null,n)},this.unfollow=function(t,n){e("DELETE","/user/following/"+t,null,n)},this.createRepo=function(t,n){e("POST","/user/repos",t,n)}},i.Repository=function(t){function n(t,n){return t===l.branch&&l.sha?n(null,l.sha):void a.getRef("heads/"+t,function(e,o){l.branch=t,l.sha=o,n(e,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(n){e("DELETE",o,t,n)},this.getRef=function(t,n){e("GET",o+"/git/refs/"+t,null,function(t,e,o){return t?n(t):void n(null,e.object.sha,o)})},this.createRef=function(t,n){e("POST",o+"/git/refs",t,n)},this.deleteRef=function(n,s){e("DELETE",o+"/git/refs/"+n,t,function(t,n,e){s(t,n,e)})},this.createRepo=function(t,n){e("POST","/user/repos",t,n)},this.deleteRepo=function(n){e("DELETE",o,t,n)},this.listTags=function(t){e("GET",o+"/tags",null,function(n,e,o){return n?t(n):void t(null,e,o)})},this.listPulls=function(t,n){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.getPull=function(t,n){e("GET",o+"/pulls/"+t,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.compare=function(t,n,s){e("GET",o+"/compare/"+t+"..."+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.listBranches=function(t){e("GET",o+"/git/refs/heads",null,function(n,e,o){return n?t(n):void t(null,e.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,n){e("GET",o+"/git/blobs/"+t,null,n,"raw")},this.getCommit=function(t,n,s){e("GET",o+"/git/commits/"+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.getSha=function(t,n,s){return n&&""!==n?void e("GET",o+"/contents/"+n+(t?"?ref="+t:""),null,function(t,n,e){return t?s(t):void s(null,n.sha,e)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,n){e("GET",o+"/statuses/"+t,null,n)},this.getTree=function(t,n){e("GET",o+"/git/trees/"+t,null,function(t,e,o){return t?n(t):void n(null,e.tree,o)})},this.postBlob=function(t,n){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},e("POST",o+"/git/blobs",t,function(t,e){return t?n(t):void n(null,e.sha)})},this.updateTree=function(t,n,s,i){var u={base_tree:t,tree:[{path:n,mode:"100644",type:"blob",sha:s}]};e("POST",o+"/git/trees",u,function(t,n){return t?i(t):void i(null,n.sha)})},this.postTree=function(t,n){e("POST",o+"/git/trees",{tree:t},function(t,e){return t?n(t):void n(null,e.sha)})},this.commit=function(n,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[n],tree:s};e("POST",o+"/git/commits",a,function(t,n){return t?r(t):(l.sha=n.sha,void r(null,n.sha))})})},this.updateHead=function(t,n,s){e("PATCH",o+"/git/refs/heads/"+t,{sha:n},function(t){s(t)})},this.show=function(t){e("GET",o,null,t)},this.contributors=function(t,n){n=n||1e3;var s=this;e("GET",o+"/stats/contributors",null,function(e,o,i){return e?t(e):void(202===i.status?setTimeout(function(){s.contributors(t,n)},n):t(e,o,i))})},this.contents=function(t,n,s){n=encodeURI(n),e("GET",o+"/contents"+(n?"/"+n:""),{ref:t},s)},this.fork=function(t){e("POST",o+"/forks",null,t)},this.listForks=function(t){e("GET",o+"/forks",null,t)},this.branch=function(t,n,e){2===arguments.length&&"function"==typeof arguments[1]&&(e=n,n=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&e?e(t):void a.createRef({ref:"refs/heads/"+n,sha:o},e)})},this.createPullRequest=function(t,n){e("POST",o+"/pulls",t,n)},this.listHooks=function(t){e("GET",o+"/hooks",null,t)},this.getHook=function(t,n){e("GET",o+"/hooks/"+t,null,n)},this.createHook=function(t,n){e("POST",o+"/hooks",t,n)},this.editHook=function(t,n,s){e("PATCH",o+"/hooks/"+t,n,s)},this.deleteHook=function(t,n){e("DELETE",o+"/hooks/"+t,null,n)},this.read=function(t,n,s){e("GET",o+"/contents/"+encodeURI(n)+(t?"?ref="+t:""),null,function(t,n,e){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,n,e)},!0)},this.remove=function(t,n,s){a.getSha(t,n,function(i,u){return i?s(i):void e("DELETE",o+"/contents/"+n,{message:n+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,e,o,s){n(t,function(n,i){a.getTree(i+"?recursive=true",function(n,u){u.forEach(function(t){t.path===e&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(n,o){a.commit(i,o,"Deleted "+e,function(n,e){a.updateHead(t,e,function(t){s(t)})})})})})},this.write=function(t,n,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(n),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),e("PUT",o+"/contents/"+encodeURI(n),f,c)})},this.getCommits=function(t,n){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,n)}},i.Gist=function(t){var n=t.id,o="/gists/"+n;this.read=function(t){e("GET",o,null,t)},this.create=function(t,n){e("POST","/gists",t,n)},this["delete"]=function(t){e("DELETE",o,null,t)},this.fork=function(t){e("POST",o+"/fork",null,t)},this.update=function(t,n){e("PATCH",o,t,n)},this.star=function(t){e("PUT",o+"/star",null,t)},this.unstar=function(t){e("DELETE",o+"/star",null,t)},this.isStarred=function(t){e("GET",o+"/star",null,t)}},i.Issue=function(t){var n="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,e){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(n+"?"+o.join("&"),e)},this.comment=function(t,n,o){e("POST",t.comments_url,{body:n},function(t,n){o(t,n)})}},i.Search=function(t){var n="/search/",o="?q="+t.query;this.repositories=function(t,s){e("GET",n+"repositories"+o,t,s)},this.code=function(t,s){e("GET",n+"code"+o,t,s)},this.issues=function(t,s){e("GET",n+"issues"+o,t,s)},this.users=function(t,s){e("GET",n+"users"+o,t,s)}},i};return i.getIssues=function(t,n){return new i.Issue({user:t,repo:n})},i.getRepo=function(t,n){return n?new i.Repository({user:t,name:n}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); +//# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map new file mode 100644 index 00000000..7cd042ab --- /dev/null +++ b/dist/github.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","status","request","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","link","split","next","forEach","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 93df07660e65bc2476c55b720dc56c3acfe9da3a Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 20 Jan 2016 02:34:20 +0000 Subject: [PATCH 9/9] Fixed code coverage --- gulpfile.js | 11 +++++------ karma.conf.js | 15 ++++++++------- package.json | 1 + src/github.js | 1 + 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 800e05ad..1ee9ffdb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,14 +20,11 @@ function runTests(singleRun, isCI, done) { var files = [ path.join(__dirname, 'test/vendor/*.js'), // PhantomJS 1.x polyfills - path.join(__dirname, 'src/github.js'), path.join(__dirname, 'test/test.*.js') ]; if (singleRun) { - files.forEach(function(path) { - preprocessors[path] = ['browserify', 'coverage']; - }); + preprocessors['test/test.*.js'] = ['browserify']; reporters.push('coverage'); } @@ -119,8 +116,10 @@ gulp.task('build', function() { .bundle() .pipe(source('github.js')) .pipe(buffer()) - .pipe(sourcemaps.init({loadMaps: true})) - .pipe(uglify()) + .pipe(sourcemaps.init({ + loadMaps: true + })) + .pipe(uglify()) .pipe(rename({ extname: '.bundle.min.js' })) diff --git a/karma.conf.js b/karma.conf.js index 842e5dd2..6354e678 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,4 +1,4 @@ -module.exports = function(config) { +module.exports = function (config) { 'use strict'; var configuration = { @@ -25,7 +25,8 @@ module.exports = function(config) { browsers: ['PhantomJS'], browserify: { - debug: true + debug: true, + transform: ['browserify-istanbul'] }, phantomjsLauncher: { @@ -40,11 +41,11 @@ module.exports = function(config) { coverageReporter: { reporters: [ { - type: 'lcov' - }, - { - type: 'text-summary' - } + type: 'lcov' + }, + { + type: 'text-summary' + } ], instrumenterOptions: { istanbul: { diff --git a/package.json b/package.json index 348913df..08d0e52f 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "devDependencies": { "browserify": "^13.0.0", + "browserify-istanbul": "^0.2.1", "chai": "^3.4.1", "codecov": "^1.0.1", "del": "^2.2.0", diff --git a/src/github.js b/src/github.js index b7a9f0b0..cb374890 100644 --- a/src/github.js +++ b/src/github.js @@ -12,6 +12,7 @@ 'use strict'; (function (root, factory) { + /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) { return (root.Github = factory(Promise, Base64, Utf8, axios));