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(
+ [
+ ``,
+ '',
+ metaData.map(formatEntry).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(
- [
- ``,
- '',
- metaData.map(formatEntry).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"
}
}