diff --git a/README.md b/README.md
index d2303ccd5..16e26af95 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
## Table of Contents
-### Adapter
+### 🔌 Adapter
View contents
@@ -28,7 +28,7 @@
-### Array
+### 📚 Array
View contents
@@ -76,7 +76,7 @@
-### Browser
+### 🖥️ Browser
View contents
@@ -102,7 +102,7 @@
-### Date
+### ⏱️ Date
View contents
@@ -114,7 +114,7 @@
-### Function
+### 🎛️ Function
View contents
@@ -128,7 +128,7 @@
-### Logic
+### 🔮 Logic
View contents
@@ -137,7 +137,7 @@
-### Math
+### ➗ Math
View contents
@@ -173,7 +173,7 @@
-### Media
+### 📺 Media
View contents
@@ -182,7 +182,7 @@
-### Node
+### 📦 Node
View contents
@@ -193,7 +193,7 @@
-### Object
+### 🗃️ Object
View contents
@@ -209,7 +209,7 @@
-### String
+### 📜 String
View contents
@@ -236,7 +236,7 @@
-### Utility
+### 💎 Utility
View contents
@@ -263,7 +263,7 @@
---
- ## Adapter
+ ## 🔌 Adapter
### call
@@ -426,7 +426,7 @@ arrayMax([1, 2, 4]); // 4
[⬆ Back to top](#table-of-contents)
---
- ## Array
+ ## 📚 Array
### chunk
@@ -1440,7 +1440,7 @@ zipObject(['a', 'b'], [1, 2, 3]); // {a: 1, b: 2}
[⬆ Back to top](#table-of-contents)
---
- ## Browser
+ ## 🖥️ Browser
### arrayToHtmlList
@@ -1892,7 +1892,7 @@ UUIDGeneratorBrowser(); // '7982fcfe-5721-4632-bede-6000885be57d'
[⬆ Back to top](#table-of-contents)
---
- ## Date
+ ## ⏱️ Date
### getDaysDiffBetweenDates
@@ -1993,7 +1993,7 @@ tomorrow(); // 2017-12-27 (if current date is 2017-12-26)
[⬆ Back to top](#table-of-contents)
---
- ## Function
+ ## 🎛️ Function
### chainAsync
@@ -2157,7 +2157,7 @@ async function sleepyWork() {
[⬆ Back to top](#table-of-contents)
---
- ## Logic
+ ## 🔮 Logic
### negate
@@ -2182,7 +2182,7 @@ negate(isOdd)(1); // false
[⬆ Back to top](#table-of-contents)
---
- ## Math
+ ## ➗ Math
### average
@@ -2888,7 +2888,7 @@ sum([1, 2, 3, 4]); // 10
[⬆ Back to top](#table-of-contents)
---
- ## Media
+ ## 📺 Media
### speechSynthesis
@@ -2919,7 +2919,7 @@ speechSynthesis('Hello, World'); // // plays the message
[⬆ Back to top](#table-of-contents)
---
- ## Node
+ ## 📦 Node
### JSONToFile
@@ -3009,7 +3009,7 @@ UUIDGeneratorNode(); // '79c7c136-60ee-40a2-beb2-856f1feabefc'
[⬆ Back to top](#table-of-contents)
---
- ## Object
+ ## 🗃️ Object
### cleanObj
@@ -3225,7 +3225,7 @@ truthCheckCollection([{ user: 'Tinky-Winky', sex: 'male' }, { user: 'Dipsy', sex
[⬆ Back to top](#table-of-contents)
---
- ## String
+ ## 📜 String
### anagrams
@@ -3750,7 +3750,7 @@ words('python, javaScript & coffee'); // ["python", "javaScript", "coffee"]
[⬆ Back to top](#table-of-contents)
---
- ## Utility
+ ## 💎 Utility
### coalesce
diff --git a/scripts/build.js b/scripts/build.js
index a6e6d607d..1f400a04e 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -3,51 +3,64 @@
Run using `npm run builder`.
*/
// Load modules
-const fs = require('fs-extra'),
- path = require('path'),
- chalk = require('chalk');
-// Set variables for paths
-const snippetsPath = './snippets',
- staticPartsPath = './static-parts';
-// Set variables for script
-let snippets = {},
- startPart = '',
+const fs = require('fs-extra');
+const path = require('path');
+const chalk = require('chalk');
+
+const SNIPPETS_PATH = './snippets';
+const STATIC_PARTS_PATH = './static-parts';
+
+const snippets = {};
+const emojis = {
+ adapter: '🔌',
+ array: '📚',
+ browser: '🖥️',
+ date: '⏱️',
+ function: '🎛️',
+ logic: '🔮',
+ math: '➗',
+ media: '📺',
+ node: '📦',
+ object: '🗃️',
+ string: '📜',
+ utility: '💎'
+};
+
+let startPart = '',
endPart = '',
output = '',
tagDbData = {};
+
// Load helper functions (these are from existing snippets in 30 seconds of code!)
const objectFromPairs = arr => arr.reduce((a, v) => ((a[v[0]] = v[1]), a), {});
const capitalize = (str, lowerRest = false) =>
str.slice(0, 1).toUpperCase() + (lowerRest ? str.slice(1).toLowerCase() : str.slice(1));
-// Start the timer of the script
+
console.time('Builder');
+
// Synchronously read all snippets and sort them as necessary (case-insensitive)
try {
- let snippetFilenames = fs.readdirSync(snippetsPath);
- snippetFilenames.sort((a, b) => {
- a = a.toLowerCase();
- b = b.toLowerCase();
- if (a < b) return -1;
- if (a > b) return 1;
- return 0;
- });
+ const snippetFilenames = fs
+ .readdirSync(SNIPPETS_PATH)
+ .sort((a, b) => a.toLowerCase() - b.toLowerCase());
// Store the data read from each snippet in the appropriate object
- for (let snippet of snippetFilenames)
- snippets[snippet] = fs.readFileSync(path.join(snippetsPath, snippet), 'utf8');
+ for (const name of snippetFilenames) {
+ snippets[name] = fs.readFileSync(path.join(SNIPPETS_PATH, name), 'utf8');
+ }
} catch (err) {
- // Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`);
process.exit(1);
}
+
// Load static parts for the README file
try {
- startPart = fs.readFileSync(path.join(staticPartsPath, 'README-start.md'), 'utf8');
- endPart = fs.readFileSync(path.join(staticPartsPath, 'README-end.md'), 'utf8');
+ startPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-start.md'), 'utf8');
+ endPart = fs.readFileSync(path.join(STATIC_PARTS_PATH, 'README-end.md'), 'utf8');
} catch (err) {
- // Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`);
process.exit(1);
}
+
// Load tag data from the database
try {
tagDbData = objectFromPairs(
@@ -58,48 +71,62 @@ try {
.map(v => v.split(':').slice(0, 2))
);
} catch (err) {
- // Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During tag database loading: ${err}`);
process.exit(1);
}
+
// Create the output for the README file
try {
+ const tags = [
+ ...new Set(
+ Object.entries(tagDbData)
+ .map(t => t[1])
+ .filter(v => v)
+ .sort((a, b) => a.localeCompare(b))
+ )
+ ];
+
// Add the start static part
output += `${startPart + '\n'}`;
- // Loop over tags and snippets to create the table of contents
let uncategorizedOutput = '';
- for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))]
- .filter(v => v)
- .sort((a, b) => a.localeCompare(b))) {
- if (capitalize(tag, true) == 'Uncategorized') {
- uncategorizedOutput += `### _${capitalize(
- tag,
- true
- )}_\n\n\nView contents
\n\n`;
- for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag))
+
+ // Loop over tags and snippets to create the table of contents
+ for (const tag of tags) {
+ const capitalizedTag = capitalize(tag, true);
+
+ if (capitalizedTag === 'Uncategorized') {
+ uncategorizedOutput += `### _${capitalizedTag}_\n\n\nView contents
\n\n`;
+ for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
uncategorizedOutput += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`;
+ }
uncategorizedOutput += '\n \n\n';
} else {
- output += `### ${capitalize(tag, true)}\n\n\nView contents
\n\n`;
- for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag))
+ output += `### ${
+ emojis[tag]
+ } ${capitalizedTag}\n\n\nView contents
\n\n`;
+ for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
output += `* [\`${taggedSnippet[0]}\`](#${taggedSnippet[0].toLowerCase()})\n`;
+ }
output += '\n \n\n';
}
}
+
output += uncategorizedOutput;
uncategorizedOutput = '';
+
// Loop over tags and snippets to create the list of snippets
- for (let tag of [...new Set(Object.entries(tagDbData).map(t => t[1]))]
- .filter(v => v)
- .sort((a, b) => a.localeCompare(b))) {
- if (capitalize(tag, true) == 'Uncategorized') {
- uncategorizedOutput += `## _${capitalize(tag, true)}_\n`;
- for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag))
+ for (const tag of tags) {
+ const capitalizedTag = capitalize(tag, true);
+
+ if (capitalizedTag == 'Uncategorized') {
+ uncategorizedOutput += `---\n ## _${capitalizedTag}_\n`;
+ for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
uncategorizedOutput += `\n${snippets[taggedSnippet[0] + '.md'] +
'\n
[⬆ back to top](#table-of-contents)\n\n'}`;
+ }
} else {
- output += `## ${capitalize(tag, true)}\n`;
- for (let taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
+ output += `---\n ## ${emojis[tag]} ${capitalizedTag}\n`;
+ for (const taggedSnippet of Object.entries(tagDbData).filter(v => v[1] === tag)) {
let data = snippets[taggedSnippet[0] + '.md'];
data =
data.slice(0, data.lastIndexOf('```js')) +
@@ -111,17 +138,16 @@ try {
}
}
}
+
output += uncategorizedOutput;
// Add the ending static part
output += `\n${endPart + '\n'}`;
// Write to the README file
fs.writeFileSync('README.md', output);
} catch (err) {
- // Handle errors (hopefully not!)
console.log(`${chalk.red('ERROR!')} During README generation: ${err}`);
process.exit(1);
}
-// Log a success message
+
console.log(`${chalk.green('SUCCESS!')} README file generated!`);
-// Log the time taken
console.timeEnd('Builder');