diff --git a/package.json b/package.json index f7c7b2757..2c6f6ee33 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,12 @@ "devDependencies": { "@babel/core": "^7.1.2", "@babel/preset-env": "^7.1.0", - "chalk": "^2.4.1", "codacy-coverage": "^3.2.0", "eslint": "^5.7.0", "fs-extra": "^6.0.0", "html-minifier": "^3.5.20", "jest": "^23.6.0", + "kleur": "^3.0.3", "markdown-builder": "^0.8.4", "markdown-it": "^8.4.2", "node-sass": "^4.9.3", diff --git a/scripts/build.js b/scripts/build.js index 34b9b2958..20ce94b6f 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -5,7 +5,7 @@ // Load modules const fs = require('fs-extra'); const path = require('path'); -const chalk = require('chalk'); +const { green, red } = require('kleur'); const util = require('./util'); const markdown = require('markdown-builder'); const { headers, misc, lists } = markdown; @@ -28,7 +28,7 @@ const makeExamples = data => { if (util.isTravisCI() && /^Travis build: \d+/g.test(process.env['TRAVIS_COMMIT_MESSAGE'])) { console.log( - `${chalk.green('NOBUILD')} README build terminated, parent commit is a Travis build!` + `${green('NOBUILD')} README build terminated, parent commit is a Travis build!` ); process.exit(0); } @@ -36,7 +36,7 @@ if ( util.isTravisCI() && (process.env['TRAVIS_EVENT_TYPE'] === 'cron' || process.env['TRAVIS_EVENT_TYPE'] === 'api') ) { - console.log(`${chalk.green('ARCHIVE')} Cron job or custom build, building archive README!`); + console.log(`${green('ARCHIVE')} Cron job or custom build, building archive README!`); console.time('Builder'); let snippets = {}; // Synchronously read all snippets from snippets_archive folder and sort them as necessary (case-insensitive) @@ -48,7 +48,7 @@ if ( for (const name of snippetFilenames.filter(s => s !== 'README.md')) snippets[name] = fs.readFileSync(path.join(SNIPPETS_ARCHIVE_PATH, name), 'utf8'); } catch (err) { - console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`); + console.log(`${red('ERROR!')} During snippet loading: ${err}`); process.exit(1); } try { @@ -70,11 +70,11 @@ if ( // Write to the README file of the archive fs.writeFileSync(path.join(SNIPPETS_ARCHIVE_PATH, 'README.md'), output); } catch (err) { - console.log(`${chalk.red('ERROR!')} During README generation for snippets archive: ${err}`); + console.log(`${red('ERROR!')} During README generation for snippets archive: ${err}`); process.exit(1); } - console.log(`${chalk.green('SUCCESS!')} README file generated for snippets archive!`); + console.log(`${green('SUCCESS!')} README file generated for snippets archive!`); console.timeEnd('Builder'); } let snippets = {}; @@ -109,7 +109,7 @@ try { 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) { - console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`); + console.log(`${red('ERROR!')} During static part loading: ${err}`); process.exit(1); } @@ -169,9 +169,9 @@ try { // Write to the README file fs.writeFileSync('README.md', output); } catch (err) { - console.log(`${chalk.red('ERROR!')} During README generation: ${err}`); + console.log(`${red('ERROR!')} During README generation: ${err}`); process.exit(1); } -console.log(`${chalk.green('SUCCESS!')} README file generated!`); +console.log(`${green('SUCCESS!')} README file generated!`); console.timeEnd('Builder'); diff --git a/scripts/extract.js b/scripts/extract.js index 90b8fb745..741d470d6 100644 --- a/scripts/extract.js +++ b/scripts/extract.js @@ -5,7 +5,7 @@ // Load modules const fs = require('fs-extra'); const path = require('path'); -const chalk = require('chalk'); +const { green } = require('kleur'); const util = require('./util'); // Paths const SNIPPETS_PATH = './snippets'; @@ -17,7 +17,7 @@ if ( process.env['TRAVIS_EVENT_TYPE'] !== 'cron' && process.env['TRAVIS_EVENT_TYPE'] !== 'api' ) { - console.log(`${chalk.green('NOBUILD')} snippet extraction terminated, not a cron or api build!`); + console.log(`${green('NOBUILD')} snippet extraction terminated, not a cron or api build!`); process.exit(0); } // Read data @@ -80,7 +80,8 @@ let listingData = { meta: { hash: v.meta.hash } - })), + })), + meta: { specification: 'http://jsonapi.org/format/' } @@ -89,5 +90,5 @@ let listingData = { fs.writeFileSync(path.join(OUTPUT_PATH, 'snippets.json'), JSON.stringify(completeData, null, 2)); fs.writeFileSync(path.join(OUTPUT_PATH, 'snippetList.json'), JSON.stringify(listingData, null, 2)); // Display messages and time -console.log(`${chalk.green('SUCCESS!')} snippets.json and snippetList.json files generated!`); +console.log(`${green('SUCCESS!')} snippets.json and snippetList.json files generated!`); console.timeEnd('Extractor'); diff --git a/scripts/glossary/keyword.js b/scripts/glossary/keyword.js index bffa863e1..e6639a845 100644 --- a/scripts/glossary/keyword.js +++ b/scripts/glossary/keyword.js @@ -4,7 +4,7 @@ */ const fs = require('fs-extra'); -const chalk = require('chalk'); +const { red } = require('kleur'); const util = require('../util'); const glossaryFiles = util.getFilesInDir('./glossary', false); @@ -19,6 +19,6 @@ try { ) + '\n'; fs.writeFileSync('glossary/keyword_database', output); } catch (err) { - console.log(`${chalk.red('ERROR!')} During glossary keyword_database generation: ${err}`); + console.log(`${red('ERROR!')} During glossary keyword_database generation: ${err}`); process.exit(1); } diff --git a/scripts/glossary/library.js b/scripts/glossary/library.js index e0951dc69..68af0958d 100644 --- a/scripts/glossary/library.js +++ b/scripts/glossary/library.js @@ -4,7 +4,7 @@ */ const fs = require('fs-extra'); -const chalk = require('chalk'); +const { red } = require('kleur'); const util = require('../util'); const glossaryFiles = util.getFilesInDir('./glossary', true, ['keyword_database', 'README.md']); @@ -54,6 +54,6 @@ try { const README = '# 30-seconds-of-code JavaScript Glossary\n\n' + TOC + '\n\n' + fileContents; fs.writeFileSync('glossary/README.md', README); } catch (err) { - console.log(`${chalk.red('ERROR!')} During glossary README generation: ${err}`); + console.log(`${red('ERROR!')} During glossary README generation: ${err}`); process.exit(1); } diff --git a/scripts/lint.js b/scripts/lint.js index 05bdf36ea..bf1b18a06 100644 --- a/scripts/lint.js +++ b/scripts/lint.js @@ -8,10 +8,10 @@ const fs = require('fs-extra'); const cp = require('child_process'); const path = require('path'); -const chalk = require('chalk'); +const { green, red } = require('kleur'); const util = require('./util'); if (util.isTravisCI() && /^Travis build: \d+/g.test(process.env['TRAVIS_COMMIT_MESSAGE'])) { - console.log(`${chalk.green('NOBUILD')} Linting terminated, parent commit is a Travis build!`); + console.log(`${green('NOBUILD')} Linting terminated, parent commit is a Travis build!`); process.exit(0); } const SNIPPETS_PATH = './snippets'; @@ -74,10 +74,10 @@ try { } fs.removeSync(TEMP_PATH); - console.log(`${chalk.green('SUCCESS!')} Snippet files linted!`); + console.log(`${green('SUCCESS!')} Snippet files linted!`); console.timeEnd('Linter'); }); } catch (err) { - console.log(`${chalk.red('ERROR!')} During linting: ${err}`); + console.log(`${red('ERROR!')} During linting: ${err}`); process.exit(1); } diff --git a/scripts/module.js b/scripts/module.js index cc39fce2f..ac7e92e36 100644 --- a/scripts/module.js +++ b/scripts/module.js @@ -4,7 +4,7 @@ */ const fs = require('fs-extra'); const path = require('path'); -const chalk = require('chalk'); +const { green, red } = require('kleur'); const util = require('./util'); const { rollup } = require('rollup'); const babel = require('rollup-plugin-babel'); @@ -143,7 +143,7 @@ async function build() { if (util.isTravisCI() && util.isNotTravisCronOrAPI()) { fs.unlink(ROLLUP_INPUT_FILE); console.log( - `${chalk.green( + `${green( 'NOBUILD' )} Module build terminated, not a cron job or a custom build!` ); @@ -156,10 +156,10 @@ async function build() { // Clean up the temporary input file Rollup used for building the module fs.unlink(ROLLUP_INPUT_FILE); - console.log(`${chalk.green('SUCCESS!')} Snippet module built!`); + console.log(`${green('SUCCESS!')} Snippet module built!`); console.timeEnd('Packager'); } catch (err) { - console.log(`${chalk.red('ERROR!')} During module creation: ${err}`); + console.log(`${red('ERROR!')} During module creation: ${err}`); process.exit(1); } } diff --git a/scripts/tag.js b/scripts/tag.js index f29131533..19c66adf6 100644 --- a/scripts/tag.js +++ b/scripts/tag.js @@ -4,10 +4,10 @@ */ // Load modules const fs = require('fs-extra'), - chalk = require('chalk'); + { black, blue, green, yellow, red, bgWhite } = require('kleur'); const util = require('./util'); if (util.isTravisCI() && /^Travis build: \d+/g.test(process.env['TRAVIS_COMMIT_MESSAGE'])) { - console.log(`${chalk.green('NOBUILD')} Tagging terminated, parent commit is a Travis build!`); + console.log(`${green('NOBUILD')} Tagging terminated, parent commit is a Travis build!`); process.exit(0); } // Set variables for paths @@ -41,26 +41,26 @@ try { } else { output += `${snippet[0].slice(0, -3)}:uncategorized\n`; missingTags++; - console.log(`${chalk.yellow('Tagged uncategorized:')} ${snippet[0].slice(0, -3)}`); + console.log(`${yellow('Tagged uncategorized:')} ${snippet[0].slice(0, -3)}`); } } // Write to tag_database fs.writeFileSync('tag_database', output); } catch (err) { // Handle errors (hopefully not!) - console.log(`${chalk.red('ERROR!')} During tag_database generation: ${err}`); + console.log(`${red('ERROR!')} During tag_database generation: ${err}`); process.exit(1); } // Log statistics for the tag_database file -console.log(`\n${chalk.bgWhite(chalk.black('=== TAG STATS ==='))}`); +console.log(`\n${bgWhite(black('=== TAG STATS ==='))}`); for (let tagData of Object.entries(tagDbStats) .filter(v => v[0] !== 'undefined') .sort((a, b) => a[0].localeCompare(b[0]))) - console.log(`${chalk.green(tagData[0])}: ${tagData[1]} snippets`); + console.log(`${green(tagData[0])}: ${tagData[1]} snippets`); console.log( - `${chalk.blue("New untagged snippets (will be tagged as 'uncategorized'):")} ${missingTags}\n` + `${blue("New untagged snippets (will be tagged as 'uncategorized'):")} ${missingTags}\n` ); // Log a success message -console.log(`${chalk.green('SUCCESS!')} tag_database file updated!`); +console.log(`${green('SUCCESS!')} tag_database file updated!`); // Log the time taken console.timeEnd('Tagger'); diff --git a/scripts/tdd.js b/scripts/tdd.js index 16f261a63..60ce88838 100644 --- a/scripts/tdd.js +++ b/scripts/tdd.js @@ -7,7 +7,7 @@ const fs = require('fs-extra'), path = require('path'); const childProcess = require('child_process'); -const chalk = require('chalk'); +const { green, yellow, red } = require('kleur'); const util = require('./util'); // Declare paths const SNIPPETS_PATH = './snippets'; @@ -23,7 +23,7 @@ try { const undefinedTests = [...snippets, ...archivedSnippets].filter(v => !definedTests.includes(v)); const orphanedTests = [...definedTests.filter(v => ![...snippets, ...archivedSnippets].includes(v))]; orphanedTests.forEach(snippet => { - console.log(`${chalk.yellow('WARNING!')} Orphaned test: ${snippet}`); + console.log(`${yellow('WARNING!')} Orphaned test: ${snippet}`); }); // Create files for undefined tests undefinedTests.forEach(snippet => { @@ -43,9 +43,9 @@ try { else { childProcess.execSync('npm test'); } - console.log(`${chalk.green('SUCCESS!')} All tests ran successfully!`); + console.log(`${green('SUCCESS!')} All tests ran successfully!`); } catch (err) { - console.log(`${chalk.red('ERROR!')} During test runs: ${err}`); + console.log(`${red('ERROR!')} During test runs: ${err}`); process.exit(1); } console.timeEnd('Tester'); diff --git a/scripts/util.js b/scripts/util.js index c43cd00ed..ee44d619f 100644 --- a/scripts/util.js +++ b/scripts/util.js @@ -1,6 +1,6 @@ const fs = require('fs-extra'), path = require('path'), - chalk = require('chalk'), + { red } = require('kleur'), crypto = require('crypto'); const babel = require('@babel/core'); @@ -33,7 +33,7 @@ const getFilesInDir = (directoryPath, withPath, exclude = null) => { } return directoryFilenames; } catch (err) { - console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`); + console.log(`${red('ERROR!')} During snippet loading: ${err}`); process.exit(1); } }; @@ -47,7 +47,7 @@ const readSnippets = snippetsPath => { for (let snippet of snippetFilenames) snippets[snippet] = fs.readFileSync(path.join(snippetsPath, snippet), 'utf8'); } catch (err) { - console.log(`${chalk.red('ERROR!')} During snippet loading: ${err}`); + console.log(`${red('ERROR!')} During snippet loading: ${err}`); process.exit(1); } return snippets; @@ -71,7 +71,7 @@ const readTags = () => { ); } catch (err) { // Handle errors (hopefully not!) - console.log(`${chalk.red('ERROR!')} During tag database loading: ${err}`); + console.log(`${red('ERROR!')} During tag database loading: ${err}`); process.exit(1); } return tagDbData; diff --git a/scripts/vscodegen.js b/scripts/vscodegen.js index 43db6c3c0..458c81893 100644 --- a/scripts/vscodegen.js +++ b/scripts/vscodegen.js @@ -5,7 +5,7 @@ // Load modules const fs = require('fs-extra'); const path = require('path'); -const chalk = require('chalk'); +const { green } = require('kleur'); let snippetsData = require('../snippet_data/snippets.json'); // Paths const OUTPUT_PATH = './vscode_snippets'; @@ -26,7 +26,7 @@ fs.writeFileSync( ); // Display messages and time console.log( - `${chalk.green( + `${green( 'SUCCESS!' )} vscode_snippets/snippets.json file generated!` ); diff --git a/scripts/web.js b/scripts/web.js index bdba8762c..597df0bbb 100644 --- a/scripts/web.js +++ b/scripts/web.js @@ -5,7 +5,7 @@ // Load modules const fs = require('fs-extra'), path = require('path'), - chalk = require('chalk'), + { green, red } = require('kleur'), md = require('markdown-it')(), minify = require('html-minifier').minify; const util = require('./util'); @@ -98,7 +98,7 @@ if ( process.env['TRAVIS_EVENT_TYPE'] !== 'api' ) { console.log( - `${chalk.green('NOBUILD')} website build terminated, parent commit is a Travis build!` + `${green('NOBUILD')} website build terminated, parent commit is a Travis build!` ); process.exit(0); } @@ -113,11 +113,11 @@ sass.render( function(err, result) { if (!err) { fs.writeFile(path.join('docs', 'style.css'), result.css, function(err2) { - if (!err2) console.log(`${chalk.green('SUCCESS!')} style.css file generated!`); - else console.log(`${chalk.red('ERROR!')} During style.css file generation: ${err}`); + if (!err2) console.log(`${green('SUCCESS!')} style.css file generated!`); + else console.log(`${red('ERROR!')} During style.css file generation: ${err}`); }); } else - console.log(`${chalk.red('ERROR!')} During style.css file generation: ${err}`); + console.log(`${red('ERROR!')} During style.css file generation: ${err}`); } ); @@ -156,7 +156,7 @@ try { ].map(filename => fs.readFileSync(path.join(staticPartsPath, filename), 'utf8')); } catch (err) { // Handle errors (hopefully not!) - console.log(`${chalk.red('ERROR!')} During static part loading: ${err}`); + console.log(`${red('ERROR!')} During static part loading: ${err}`); process.exit(1); } // Load tag data from the database @@ -242,12 +242,12 @@ try { page.content ); console.log( - `${chalk.green('SUCCESS!')} ${page.tag === 'array' ? 'index' : page.tag}.html file generated!` + `${green('SUCCESS!')} ${page.tag === 'array' ? 'index' : page.tag}.html file generated!` ); }); } catch (err) { // Handle errors (hopefully not!) - console.log(`${chalk.red('ERROR!')} During category page generation: ${err}`); + console.log(`${red('ERROR!')} During category page generation: ${err}`); process.exit(1); } @@ -359,9 +359,9 @@ try { const minifiedArchivedOutput = minifyHTML(archivedOutput); fs.writeFileSync(path.join(docsPath, 'archive.html'), minifiedArchivedOutput); - console.log(`${chalk.green('SUCCESS!')} archive.html file generated!`); + console.log(`${green('SUCCESS!')} archive.html file generated!`); } catch (err) { - console.log(`${chalk.red('ERROR!')} During archive.html generation: ${err}`); + console.log(`${red('ERROR!')} During archive.html generation: ${err}`); process.exit(1); } @@ -392,9 +392,9 @@ try { // Generate and minify 'glossary.html' file const minifiedGlossaryOutput = minifyHTML(glossaryOutput); fs.writeFileSync(path.join(docsPath, 'glossary.html'), minifiedGlossaryOutput); - console.log(`${chalk.green('SUCCESS!')} glossary.html file generated!`); + console.log(`${green('SUCCESS!')} glossary.html file generated!`); } catch (err) { - console.log(`${chalk.red('ERROR!')} During glossary.html generation: ${err}`); + console.log(`${red('ERROR!')} During glossary.html generation: ${err}`); process.exit(1); } @@ -406,9 +406,9 @@ staticFiles.forEach(f => { fs.writeFileSync(path.join(docsPath, f), generateMenuForStaticPage(fileData)); } else fs.copyFileSync(path.join(staticPartsPath, f), path.join(docsPath, f)); - console.log(`${chalk.green('SUCCESS!')} ${f} file copied!`); + console.log(`${green('SUCCESS!')} ${f} file copied!`); } catch (err) { - console.log(`${chalk.red('ERROR!')} During ${f} copying: ${err}`); + console.log(`${red('ERROR!')} During ${f} copying: ${err}`); process.exit(1); } });