From 258f50119423382020a6dcbc406621ae6d5ac61f Mon Sep 17 00:00:00 2001 From: Raphael Okon Date: Thu, 1 Sep 2016 21:02:50 +0200 Subject: [PATCH] listStartkits now fetches a list of repos and returns a Promise with {name,url} per repo --- core/lib/starterkit_manager.js | 40 +++++++++++++++++++++++++++++----- package.json | 1 + 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/core/lib/starterkit_manager.js b/core/lib/starterkit_manager.js index 5be59c776..1f6eef800 100644 --- a/core/lib/starterkit_manager.js +++ b/core/lib/starterkit_manager.js @@ -1,10 +1,11 @@ "use strict"; var starterkit_manager = function (config) { - var path = require('path'), - fs = require('fs-extra'), - util = require('./utilities'), - paths = config.paths; + var path = require('path'), + fetch = require('node-fetch'), + fs = require('fs-extra'), + util = require('./utilities'), + paths = config.paths; function loadStarterKit(starterkitName, clean) { try { @@ -41,8 +42,35 @@ var starterkit_manager = function (config) { } } + /** + * @func listStarterkits + * @desc Fetches starterkit repos from GH API that contain 'starterkit' in their name for the user 'pattern-lab' + * @returns {Promise} Returns an Array<{name,url}> for the starterkit repos + */ function listStarterkits() { - console.log('https://github.com/search?utf8=%E2%9C%93&q=starterkit+in%3Aname%2C+user%3Apattern-lab&type=Repositories&ref=searchresults'); + return fetch('https://api.github.com/search/repositories?q=starterkit+in:name+user:pattern-lab&sort=stars&order=desc', { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }).then(function (res) { + var contentType = res.headers.get('content-type'); + if (contentType && contentType.indexOf('application/json') === -1) { + throw new TypeError("StarterkitManager->listStarterkits: Not valid JSON"); + } + return res.json() + }).then(function (json) { + if (!json.items || !Array.isArray(json.items)) { + return false; + } + return json.items + .map(function (repo) { + return {name: repo.name, url: repo.html_url} + }); + }).catch(function (err) { + console.error(err); + return false; + }); } function packStarterkit() { @@ -63,7 +91,7 @@ var starterkit_manager = function (config) { loadStarterKit(starterkitName, clean); }, list_starterkits: function () { - listStarterkits(); + return listStarterkits(); }, pack_starterkit: function () { packStarterkit(); diff --git a/package.json b/package.json index f6f795888..3d0957921 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "json5": "^0.5.0", "lodash": "~4.13.1", "markdown-it": "^6.0.1", + "node-fetch": "^1.6.0", "patternengine-node-mustache": "^1.0.0" }, "devDependencies": {