From ce8779ec61e9964a5f0c77b9dedcd9ecea8a297b Mon Sep 17 00:00:00 2001 From: Julien Bisconti Date: Sat, 21 Jul 2018 15:12:59 +0200 Subject: [PATCH] Merge build scripts --- build.js | 248 ++++++++++++++++++++++++++++++--------- buildMetadata.js | 28 +++-- buildTable.js | 122 ------------------- package-lock.json | 290 +++++++--------------------------------------- package.json | 41 ++++--- 5 files changed, 264 insertions(+), 465 deletions(-) delete mode 100644 buildTable.js diff --git a/build.js b/build.js index 7a1ec10..d982802 100644 --- a/build.js +++ b/build.js @@ -1,25 +1,170 @@ -const fs = require('fs'); -const showdown = require('showdown'); +const fs = require('fs-extra'); const cheerio = require('cheerio'); +const dayjs = require('dayjs'); +const showdown = require('showdown'); const Parcel = require('parcel-bundler'); const sm = require('sitemap'); process.env.NODE_ENV = 'production'; -process.on('unhandledRejection', error => { - console.log('unhandledRejection', error.message); -}); +const LOG = { + error: (...args) => console.error('❌ ERROR', { ...args }), + debug: (...args) => { + if (process.env.DEBUG) console.log('💡 DEBUG: ', { ...args }); + }, +}; +const handleFailure = err => { + LOG.error(err); + process.exit(1); +}; -const readme = 'README.md'; -const template = 'website/index.tmpl.html'; -const merged = 'website/index.html'; -const destination = 'website/index.html'; +process.on('unhandledRejection', handleFailure); -const includeReadme = ({ - md = readme, - templateHTML = template, - dest = merged, -} = {}) => { +// --- FILES +const README = 'README.md'; +const WEBSITE_FOLDER = 'website'; +const DATA_FOLDER = 'data'; +const LATEST_FILENAME = `${DATA_FOLDER}/latest`; +const indexTemplate = `${WEBSITE_FOLDER}/index.tmpl.html`; +const indexDestination = `${WEBSITE_FOLDER}/index.html`; +const tableTemplate = `${WEBSITE_FOLDER}/table.tmpl.html`; +const tableDestination = `${WEBSITE_FOLDER}/table.html`; + +const valueNames = [ + 'name', + 'description', + 'homepage', + 'star', + 'updated', + 'language', + 'license', + 'author', +]; + +const sitemapOpts = { + hostname: 'https://awesome-docker.netlify.com/', + cacheTime: 6000000, // 600 sec (10 min) cache purge period + urls: [ + { + url: '/', + changefreq: 'daily', + priority: 0.8, + lastmodrealtime: true, + lastmodfile: 'dist/index.html', + }, + { + url: '/table.html', + changefreq: 'daily', + priority: 0.8, + lastmodrealtime: true, + lastmodfile: 'dist/table.html', + }, + ], +}; + +const getLastUpdate = updated => { + const updt = Number(dayjs(updated).diff(dayjs(), 'days')); + if (updt < 0) { + if (Math.abs(updt) === 1) return `1 day ago`; + return `${Math.abs(updt)} days ago`; + } else if (updt === 0) return 'today'; + return updated; +}; + +const mapHomePage = h => { + if (h === 'manageiq.org') return 'https://manageiq.org'; + else if (h === 'dev-sec.io') return 'https://dev-sec.io'; + return h; +}; + +const mapLicense = l => { + if (l === 'GNU Lesser General Public License v3.0') return 'GNU LGPL v3.0'; + else if (l === 'GNU General Public License v2.0') return 'GNU GPL v2.0'; + else if (l === 'GNU General Public License v3.0') return 'GNU GPL v3.0'; + else if (l === 'BSD 3-Clause "New" or "Revised" License') + return 'BSD 3-Clause'; + else if (l === 'BSD 2-Clause "Simplified" License') return 'BSD 2-Clause'; + return l; +}; + +const formatEntry = ( + { + name, + html_url: repoURL, + description, + homepage, + stargazers_count: stargazers, + pushed_at: updated, + language, + license, + owner, + }, + i, +) => + [ + `
  • `, + `${name}`, + `

    ${description || '-'}

    `, + `

    Last code update: ${getLastUpdate( + updated, + )}

    `, + (homepage && + `website`) || + '

    ', + `

    ⭐️${stargazers}

    `, + (language && `

    ${language}

    `) || '

    ', + (license && + license.url !== null && + `${mapLicense( + license.name, + )}`) || + '

    ', + owner && + `

    Made by

    ${owner.login}`, + '
  • ', + ].join(''); + +async function processTable() { + try { + LOG.debug('Loading files...', { LATEST_FILENAME, tableTemplate }); + const latestFilename = await fs.readFile(LATEST_FILENAME, 'utf8'); + LOG.debug({ latestFilename }); + const metaData = await fs.readJson(latestFilename, 'utf-8'); + + const template = await fs.readFile(tableTemplate, 'utf8'); + const $ = cheerio.load(template); + const btn = valueNames.map( + v => ``, + ); + $('#md').append( + [ + `
    `, + ``, + `

    Sort by

    ${btn.join('')}
    `, + `
    `, + '', + ].join(''), + ); + + LOG.debug('Writing table.html'); + await fs.outputFile(tableDestination, $.html(), 'utf8'); + LOG.debug('✅ DONE 👍'); + } catch (err) { + handleFailure(err); + } +} + +async function processIndex() { const converter = new showdown.Converter({ omitExtraWLInCodeBlocks: true, simplifiedAutoLink: true, @@ -41,58 +186,47 @@ const includeReadme = ({ }); // converter.setFlavor('github'); - console.log('Loading files...'); - const indexTemplate = fs.readFileSync(templateHTML, 'utf8'); - const markdown = fs.readFileSync(md, 'utf8'); + try { + LOG.debug('Loading files...', { indexTemplate, README }); + const template = await fs.readFile(indexTemplate, 'utf8'); + const markdown = await fs.readFile(README, 'utf8'); - console.log('Merging files...'); - const $ = cheerio.load(indexTemplate); - $('#md').append(converter.makeHtml(markdown)); - console.log('Writing index.html'); - fs.writeFileSync(dest, $.html(), 'utf8'); - console.log('DONE 👍'); -}; + LOG.debug('Merging files...'); + const $ = cheerio.load(template); -const bundle = (dest = destination) => { - console.log(''); - console.log('Bundling with Parcel.js'); - console.log(''); + $('#md').append(converter.makeHtml(markdown)); - new Parcel(dest, { + LOG.debug('Writing index.html'); + await fs.outputFile(indexDestination, $.html(), 'utf8'); + LOG.debug('DONE 👍'); + } catch (err) { + handleFailure(err); + } +} + +const bundle = () => { + LOG.debug('---'); + LOG.debug('📦 Bundling with Parcel.js'); + LOG.debug('---'); + + new Parcel(indexDestination, { name: 'build', publicURL: '/', }) .bundle() - .then(() => { + .then(() => // Creates a sitemap object given the input configuration with URLs - const sitemap = sm.createSitemap({ - hostname: 'https://awesome-docker.netlify.com/', - cacheTime: 6000000, // 600 sec (10 min) cache purge period - urls: [ - { - url: '/', - changefreq: 'daily', - priority: 0.8, - lastmodrealtime: true, - lastmodfile: 'dist/index.html', - }, - { - url: '/table.html', - changefreq: 'weekly', - priority: 0.8, - lastmodrealtime: true, - lastmodfile: 'dist/table.html', - }, - ], - }); - fs.writeFileSync('dist/sitemap.xml', sitemap.toString()); - // fs.copyFileSync('website/sitemap.xml', 'dist/sitemap.xml'); - }); + fs.outputFile( + 'dist/sitemap.xml', + sm.createSitemap(sitemapOpts).toString(), + ), + ); }; -const main = () => { - includeReadme(); - bundle(); -}; +async function main() { + await processTable(); + await processIndex(); + await bundle(); +} main(); diff --git a/buildMetadata.js b/buildMetadata.js index 989cad7..c0614f8 100644 --- a/buildMetadata.js +++ b/buildMetadata.js @@ -10,10 +10,12 @@ const LOG = { if (process.env.DEBUG) console.log('💡 DEBUG: ', { ...args }); }, }; +const handleFailure = err => { + LOG.error(err); + process.exit(1); +}; -process.on('unhandledRejection', error => { - LOG.error('unhandledRejection', error.message); -}); +process.on('unhandledRejection', handleFailure); if (!process.env.TOKEN) { LOG.error('no credentials found.'); @@ -26,12 +28,11 @@ const DELAY = parseInt(process.env.DELAY, 10) || 3000; const INTERVAL = parseInt(process.env.INTERVAL, 10) || 1; const INTERVAL_UNIT = process.env.INTERVAL_UNIT || 'days'; -// --- FILENAME --- -const README = 'README.md'; +// --- FILES --- const DATA_FOLDER = 'data'; -const GITHUB_METADATA_FILE = `${DATA_FOLDER}/${dayjs().format( - 'YYYY-MM-DDTHH.mm.ss', -)}-fetched_repo_data.json`; +const README = 'README.md'; +const DATE = dayjs().format('YYYY-MM-DDTHH.mm.ss'); +const GITHUB_METADATA_FILE = `${DATA_FOLDER}/${DATE}-fetched_repo_data.json`; const LATEST_FILENAME = `${DATA_FOLDER}/latest`; const GITHUB_REPOS = `${DATA_FOLDER}/list_repos.json`; @@ -46,12 +47,8 @@ const options = { }, }; +// ---------------------------------------------------------------------------- const removeHost = x => x.slice('https://github.com/'.length, x.length); -const barLine = console.draft('Starting batch...'); -const handleFailure = err => { - LOG.error(err); - process.exit(1); -}; const delay = ms => new Promise(resolve => { @@ -59,7 +56,7 @@ const delay = ms => }); const get = (pathURL, opt) => { - LOG.debug(` Fetching ${pathURL}`); + LOG.debug(`Fetching ${pathURL}`); return fetch(`${API}repos/${pathURL}`, { ...options, ...opt, @@ -83,11 +80,13 @@ const extractAllRepos = markdown => { const ProgressBar = (i, batchSize, total) => { const progress = Math.round((i / total) * 100); const units = Math.round(progress / 2); + const barLine = console.draft('Starting batch...'); return barLine( `[${'='.repeat(units)}${' '.repeat(50 - units)}] ${progress}% - # ${i}`, ); }; +// ---------------------------------------------------------------------------- async function batchFetchRepoMetadata(githubRepos) { const repos = githubRepos.map(removeHost); @@ -127,7 +126,6 @@ function shouldUpdate(lastUpdateTime) { async function main() { try { const lastUpdateTime = await fs.readFile(LATEST_FILENAME, 'utf8'); - LOG.debug('Checking if updating is needed'); if (!shouldUpdate(lastUpdateTime)) { LOG.debug('Last update was less than a day ago 😅. Exiting...'); diff --git a/buildTable.js b/buildTable.js deleted file mode 100644 index 9cad43d..0000000 --- a/buildTable.js +++ /dev/null @@ -1,122 +0,0 @@ -const fs = require('fs'); -const cheerio = require('cheerio'); -const dayjs = require('dayjs'); - -const getLatestFilename = fs.readFileSync('data/latest', 'utf-8'); -console.log(getLatestFilename); -const metaData = require(`./${getLatestFilename}`); // eslint-disable-line import/no-dynamic-require - -process.env.NODE_ENV = 'production'; - -process.on('unhandledRejection', error => { - console.log('unhandledRejection', error.message); -}); - -const templateHTML = 'website/table.tmpl.html'; -const destination = 'website/table.html'; - -const valueNames = [ - 'name', - 'description', - 'homepage', - 'star', - 'updated', - 'language', - 'license', - 'author', -]; - -const getLastUpdate = updated => { - const updt = Number(dayjs(updated).diff(dayjs(), 'days')); - if (updt < 0) { - if (Math.abs(updt) === 1) return `1 day ago`; - return `${Math.abs(updt)} days ago`; - } else if (updt === 0) return 'today'; - return updated; -}; - -const mapHomePage = h => { - if (h === 'manageiq.org') return 'https://manageiq.org'; - else if (h === 'dev-sec.io') return 'https://dev-sec.io'; - return h; -}; - -const mapLicense = l => { - if (l === 'GNU Lesser General Public License v3.0') return 'GNU LGPL v3.0'; - else if (l === 'GNU General Public License v2.0') return 'GNU GPL v2.0'; - else if (l === 'GNU General Public License v3.0') return 'GNU GPL v3.0'; - else if (l === 'BSD 3-Clause "New" or "Revised" License') - return 'BSD 3-Clause'; - else if (l === 'BSD 2-Clause "Simplified" License') return 'BSD 2-Clause'; - return l; -}; - -const formatEntry = ( - { - name, - html_url: repoURL, - description, - homepage, - stargazers_count: stargazers, - pushed_at: updated, - language, - license, - owner, - }, - i, -) => - [ - `
  • `, - `${name}`, - `

    ${description || '-'}

    `, - `

    Last code update: ${getLastUpdate( - updated, - )}

    `, - (homepage && - `website`) || - '

    ', - `

    ⭐️${stargazers}

    `, - (language && `

    💻${language}

    `) || '

    ', - (license && - license.url !== null && - `${mapLicense( - license.name, - )}`) || - '

    ', - owner && - `

    Made by

    ${owner.login}`, - '
  • ', - ].join(''); - -function main() { - const indexTemplate = fs.readFileSync(templateHTML, 'utf8'); - const $ = cheerio.load(indexTemplate); - const btn = valueNames.map( - v => ``, - ); - $('#md').append( - [ - `
    `, - ``, - `

    Sort by

    ${btn.join('')}
    `, - `
    `, - '', - ].join(''), - ); - - console.log('Writing table.html'); - fs.writeFileSync(destination, $.html(), 'utf8'); - console.log('DONE 👍'); -} - -main(); diff --git a/package-lock.json b/package-lock.json index cc08ea0..22bde60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -131,11 +131,6 @@ "resolved": "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==" }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -146,14 +141,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, - "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", - "requires": { - "acorn": "^5.0.0" - } - }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", @@ -297,9 +284,9 @@ } }, "aria-query": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", - "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", "dev": true, "requires": { "ast-types-flow": "0.0.7", @@ -321,11 +308,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -560,9 +542,9 @@ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "axobject-query": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", - "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.1.tgz", + "integrity": "sha1-Bd+nBa2orZ25k/polvItOVsLCgc=", "dev": true, "requires": { "ast-types-flow": "0.0.7" @@ -667,16 +649,16 @@ } }, "babel-eslint": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.3.tgz", - "integrity": "sha512-0HeSTtaXg/Em7FCUWxwOT+KeFSO1O7LuRuzhk7g+1BjwdlQGlHq4OyMi3GqGxrNfEq8jEi6Hmt5ylEQUhurgiQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", "dev": true, "requires": { "@babel/code-frame": "7.0.0-beta.44", "@babel/traverse": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "eslint-scope": "~3.7.1", + "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" } }, @@ -1510,11 +1492,6 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "browser-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=" - }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -2466,19 +2443,6 @@ } } }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=" - }, - "cssstyle": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz", - "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==", - "requires": { - "cssom": "0.3.x" - } - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2501,16 +2465,6 @@ "assert-plus": "^1.0.0" } }, - "data-urls": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", - "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", - "requires": { - "abab": "^1.0.4", - "whatwg-mimetype": "^2.0.0", - "whatwg-url": "^6.4.0" - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2755,14 +2709,6 @@ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, "domhandler": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", @@ -3067,9 +3013,9 @@ } }, "eslint-plugin-import": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.12.0.tgz", - "integrity": "sha1-2tMXgSktZmSyUxf9BJ0uKy8CIF0=", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", + "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", "dev": true, "requires": { "contains-path": "^0.1.0", @@ -3154,24 +3100,36 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz", - "integrity": "sha1-VFg9GuRCSDFi4EDhPMMYZUZRAOU=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz", + "integrity": "sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A==", "dev": true, "requires": { - "aria-query": "^0.7.0", + "aria-query": "^3.0.0", "array-includes": "^3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "^0.1.0", - "damerau-levenshtein": "^1.0.0", - "emoji-regex": "^6.1.0", - "jsx-ast-utils": "^2.0.0" + "ast-types-flow": "^0.0.7", + "axobject-query": "^2.0.1", + "damerau-levenshtein": "^1.0.4", + "emoji-regex": "^6.5.1", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1" + }, + "dependencies": { + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + } } }, "eslint-plugin-prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", - "integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz", + "integrity": "sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==", "dev": true, "requires": { "fast-diff": "^1.1.1", @@ -4457,14 +4415,6 @@ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, "htmlnano": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.1.9.tgz", @@ -5064,55 +5014,6 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, - "jsdom": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.11.0.tgz", - "integrity": "sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A==", - "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.3.1 < 0.4.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwsapi": "^2.0.0", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.83.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^4.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" - } - } - } - }, "jsesc": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", @@ -5214,11 +5115,6 @@ "invert-kv": "^1.0.0" } }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -5357,11 +5253,6 @@ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -5870,11 +5761,6 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "nwsapi": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.2.tgz", - "integrity": "sha512-wAvMV1QgoYPvqfcAmX1M86SyZA3SnNT6UNvjqO/pKHjIZzhMpPHjCTOWdOfkmUknjnvjDq09wDiBaHAzXSLiSA==" - }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -6527,11 +6413,6 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -8554,9 +8435,9 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "prettier": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz", - "integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==", + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", "dev": true }, "private": { @@ -8999,24 +8880,6 @@ } } }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "requires": { - "lodash": "^4.13.1" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -9601,11 +9464,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -9770,11 +9628,6 @@ } } }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=" - }, "table": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", @@ -9926,21 +9779,6 @@ "punycode": "^1.4.1" } }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -10322,49 +10160,6 @@ "indexof": "0.0.1" } }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "requires": { - "iconv-lite": "0.4.19" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - } - } - }, - "whatwg-mimetype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", - "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", @@ -10511,11 +10306,6 @@ "os-homedir": "^1.0.0" } }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 7a22f97..b63adcf 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "awesome-docker-website", "version": "1.0.0", "description": "A curated list of Docker resources and projects Inspired by @sindresorhus and improved by amazing contributors", - "main": "index.js", + "main": "build.js", "scripts": { - "build": "node buildTable.js && rimraf ./dist/ && node build.js" + "build": "rimraf ./dist/ && node build.js" }, "repository": { "type": "git", @@ -17,27 +17,26 @@ }, "homepage": "https://github.com/veggiemonk/awesome-docker#readme", "dependencies": { - "cheerio": "^1.0.0-rc.2", - "critical": "^1.3.3", - "dayjs": "^1.6.6", - "draftlog": "^1.0.12", + "cheerio": "1.0.0-rc.2", + "critical": "1.3.3", + "dayjs": "1.6.6", + "draftlog": "1.0.12", "fs-extra": "7.0.0", - "jsdom": "^11.11.0", - "list.js": "^1.5.0", - "node-fetch": "^2.1.2", - "parcel-bundler": "^1.8.1", - "rimraf": "^2.6.2", - "showdown": "^1.8.6", - "sitemap": "^1.13.0" + "list.js": "1.5.0", + "node-fetch": "2.1.2", + "parcel-bundler": "1.8.1", + "rimraf": "2.6.2", + "showdown": "1.8.6", + "sitemap": "1.13.0" }, "devDependencies": { - "babel-eslint": "^8.2.3", - "eslint": "^4.19.1", - "eslint-config-airbnb-base": "^12.1.0", - "eslint-config-prettier": "^2.9.0", - "eslint-plugin-import": "^2.12.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-prettier": "^2.6.0", - "prettier": "^1.13.5" + "babel-eslint": "8.2.6", + "eslint": "4.19.1", + "eslint-config-airbnb-base": "12.1.0", + "eslint-config-prettier": "2.9.0", + "eslint-plugin-import": "2.13.0", + "eslint-plugin-jsx-a11y": "6.1.1", + "eslint-plugin-prettier": "2.6.2", + "prettier": "1.13.7" } }