diff --git a/lib/cache_stream.js b/lib/cache_stream.js
index 640d9412..91e65124 100644
--- a/lib/cache_stream.js
+++ b/lib/cache_stream.js
@@ -1,6 +1,6 @@
'use strict';
-var Transform = require('stream').Transform;
+const { Transform } = require('stream');
function CacheStream() {
Transform.call(this);
@@ -11,7 +11,7 @@ function CacheStream() {
require('util').inherits(CacheStream, Transform);
CacheStream.prototype._transform = function(chunk, enc, callback) {
- var buf = chunk instanceof Buffer ? chunk : Buffer.from(chunk, enc);
+ const buf = chunk instanceof Buffer ? chunk : Buffer.from(chunk, enc);
this._cache.push(buf);
this.push(buf);
diff --git a/lib/camel_case_keys.js b/lib/camel_case_keys.js
index 40b0badf..6008b910 100644
--- a/lib/camel_case_keys.js
+++ b/lib/camel_case_keys.js
@@ -1,8 +1,8 @@
'use strict';
-var camelCase = require('camel-case');
+const camelCase = require('camel-case');
-var rPrefixUnderscore = /^(_+)/;
+const rPrefixUnderscore = /^(_+)/;
function getter(key) {
return function() {
@@ -19,17 +19,17 @@ function setter(key) {
function camelCaseKeys(obj) {
if (typeof obj !== 'object') throw new TypeError('obj must be an object!');
- var keys = Object.keys(obj);
- var result = {};
+ const keys = Object.keys(obj);
+ const result = {};
- for (var i = 0, len = keys.length; i < len; i++) {
- var key = keys[i];
- var value = obj[key];
- var match = key.match(rPrefixUnderscore);
- var newKey;
+ for (let i = 0, len = keys.length; i < len; i++) {
+ const key = keys[i];
+ const value = obj[key];
+ const match = key.match(rPrefixUnderscore);
+ let newKey;
if (match) {
- var underscore = match[1];
+ const underscore = match[1];
newKey = underscore + camelCase(key.substring(underscore.length));
} else {
newKey = camelCase(key);
@@ -39,8 +39,12 @@ function camelCaseKeys(obj) {
result[key] = value;
} else {
result[newKey] = value;
- result.__defineGetter__(key, getter(newKey));
- result.__defineSetter__(key, setter(newKey));
+ Object.defineProperty(result, key, {
+ get: getter(newKey),
+ set: setter(newKey),
+ configurable: true,
+ enumerable: true
+ });
}
}
diff --git a/lib/escape_diacritic.js b/lib/escape_diacritic.js
index 2b39d827..5e94465d 100644
--- a/lib/escape_diacritic.js
+++ b/lib/escape_diacritic.js
@@ -1,6 +1,6 @@
'use strict';
-var defaultDiacriticsRemovalap = [
+const defaultDiacriticsRemovalap = [
{'base': 'A', 'letters': '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
{'base': 'AA', 'letters': '\uA732'},
{'base': 'AE', 'letters': '\u00C6\u01FC\u01E2'},
@@ -89,12 +89,12 @@ var defaultDiacriticsRemovalap = [
{'base': 'z', 'letters': '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
];
-var diacriticsMap = {};
+const diacriticsMap = {};
-for (var i = 0; i < defaultDiacriticsRemovalap.length; i++) {
- var letters = defaultDiacriticsRemovalap[i].letters.split('');
+for (let i = 0; i < defaultDiacriticsRemovalap.length; i++) {
+ const letters = defaultDiacriticsRemovalap[i].letters.split('');
- for (var j = 0; j < letters.length; j++) {
+ for (let j = 0; j < letters.length; j++) {
diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;
}
}
@@ -104,9 +104,7 @@ function escapeDiacritic(str) {
// http://stackoverflow.com/a/18391901
// eslint-disable-next-line no-control-regex
- return str.replace(/[^\u0000-\u007E]/g, function(a) {
- return diacriticsMap[a] || a;
- });
+ return str.replace(/[^\u0000-\u007E]/g, a => diacriticsMap[a] || a);
}
module.exports = escapeDiacritic;
diff --git a/lib/escape_html.js b/lib/escape_html.js
index f094eb66..8c51211b 100644
--- a/lib/escape_html.js
+++ b/lib/escape_html.js
@@ -1,6 +1,6 @@
'use strict';
-var htmlEntityMap = {
+const htmlEntityMap = {
'&': '&',
'<': '<',
'>': '>',
@@ -13,9 +13,7 @@ function escapeHTML(str) {
if (typeof str !== 'string') throw new TypeError('str must be a string!');
// http://stackoverflow.com/a/12034334
- return str.replace(/[&<>"'/]/g, function(a) {
- return htmlEntityMap[a];
- });
+ return str.replace(/[&<>"'/]/g, a => htmlEntityMap[a]);
}
module.exports = escapeHTML;
diff --git a/lib/hash.js b/lib/hash.js
index 4a7197e6..3112a588 100644
--- a/lib/hash.js
+++ b/lib/hash.js
@@ -1,9 +1,9 @@
'use strict';
-var Transform = require('stream').Transform;
-var crypto = require('crypto');
+const { Transform } = require('stream');
+const crypto = require('crypto');
-var ALGORITHM = 'sha1';
+const ALGORITHM = 'sha1';
function HashStream() {
Transform.call(this);
@@ -23,8 +23,8 @@ HashStream.prototype._flush = function(callback) {
callback();
};
-exports.hash = function(content) {
- var hash = crypto.createHash(ALGORITHM);
+exports.hash = content => {
+ const hash = crypto.createHash(ALGORITHM);
hash.update(content);
return hash.digest();
};
diff --git a/lib/highlight.js b/lib/highlight.js
index f97d73fd..42fa2aa9 100644
--- a/lib/highlight.js
+++ b/lib/highlight.js
@@ -1,72 +1,71 @@
'use strict';
-var hljs = require('highlight.js/lib/highlight');
-var Entities = require('html-entities').XmlEntities;
-var entities = new Entities();
-var alias = require('../highlight_alias.json');
+const hljs = require('highlight.js/lib/highlight');
+const Entities = require('html-entities').XmlEntities;
+const entities = new Entities();
+const alias = require('../highlight_alias.json');
-function highlightUtil(str, options) {
+function highlightUtil(str, options = {}) {
if (typeof str !== 'string') throw new TypeError('str must be a string!');
- options = options || {};
- var useHljs = options.hasOwnProperty('hljs') ? options.hljs : false;
- var gutter = options.hasOwnProperty('gutter') ? options.gutter : true;
- var wrap = options.hasOwnProperty('wrap') ? options.wrap : true;
- var firstLine = options.hasOwnProperty('firstLine') ? +options.firstLine : 1;
- var caption = options.caption;
- var mark = options.hasOwnProperty('mark') ? options.mark : [];
- var tab = options.tab;
+ const useHljs = options.hasOwnProperty('hljs') ? options.hljs : false;
+ const {
+ gutter = true,
+ firstLine = 1,
+ caption,
+ mark = [],
+ tab
+ } = options;
+ let { wrap = true } = options;
hljs.configure({ classPrefix: useHljs ? 'hljs-' : ''});
- var data = highlight(str, options);
+ const data = highlight(str, options);
if (useHljs && !gutter) wrap = false;
- var before = useHljs ? '
' : '
';
- var after = useHljs ? '
' : '';
+ const before = useHljs ? `
` : '
';
+ const after = useHljs ? '
' : '';
if (!wrap) return useHljs ? before + data.value + after : data.value;
- var lines = data.value.split('\n');
- var numbers = '';
- var content = '';
- var result = '';
- var line;
+ const lines = data.value.split('\n');
+ let numbers = '';
+ let content = '';
- for (var i = 0, len = lines.length; i < len; i++) {
- line = lines[i];
+ for (let i = 0, len = lines.length; i < len; i++) {
+ let line = lines[i];
if (tab) line = replaceTabs(line, tab);
- numbers += '' + (firstLine + i) + ' ';
+ numbers += `${firstLine + i} `;
content += formatLine(line, firstLine + i, mark, options);
}
- result += '
';
+ let result = `
`;
if (caption) {
- result += '' + caption + '';
+ result += `${caption}`;
}
result += '
';
if (gutter) {
- result += '
' + numbers + '
';
+ result += `
${numbers}
`;
}
- result += '
' + before + content + after + '
';
+ result += `
${before}${content}${after}
`;
result += '
';
return result;
}
function formatLine(line, lineno, marked, options) {
- var useHljs = options.hljs || false;
- var res = useHljs ? '' : '' + line + '' : ' marked">' + line + '';
+ res += useHljs ? `${line}` : ` marked">${line}`;
} else {
- res += useHljs ? line : '">' + line + '';
+ res += useHljs ? line : `">${line}`;
}
res += ' ';
@@ -78,10 +77,10 @@ function encodePlainString(str) {
}
function replaceTabs(str, tab) {
- return str.replace(/^\t+/, function(match) {
- var result = '';
+ return str.replace(/^\t+/, match => {
+ let result = '';
- for (var i = 0, len = match.length; i < len; i++) {
+ for (let i = 0, len = match.length; i < len; i++) {
result += tab;
}
@@ -90,7 +89,7 @@ function replaceTabs(str, tab) {
}
function loadLanguage(lang) {
- hljs.registerLanguage(lang, require('highlight.js/lib/languages/' + lang));
+ hljs.registerLanguage(lang, require(`highlight.js/lib/languages/${lang}`));
}
function tryLanguage(lang) {
@@ -102,29 +101,25 @@ function tryLanguage(lang) {
}
function loadAllLanguages() {
- alias.languages.filter(function(lang) {
- return !hljs.getLanguage(lang);
- }).forEach(loadLanguage);
+ alias.languages.filter(lang => !hljs.getLanguage(lang)).forEach(loadLanguage);
}
function highlight(str, options) {
- var lang = options.lang;
- var autoDetect = options.hasOwnProperty('autoDetect') ? options.autoDetect : false;
+ let { lang } = options;
+ const { autoDetect = false } = options;
if (!lang && autoDetect) {
loadAllLanguages();
- lang = (function() {
- var result = hljs.highlightAuto(str);
- if (result.relevance > 0 && result.language) return result.language;
+ const result = hljs.highlightAuto(str);
+ if (result.relevance > 0 && result.language) lang = result.language;
- }());
}
if (!lang) {
lang = 'plain';
}
- var result = {
+ const result = {
value: encodePlainString(str),
language: lang.toLowerCase()
};
@@ -145,11 +140,11 @@ function highlight(str, options) {
function tryHighlight(str, lang) {
try {
- var matching = str.match(/(\r?\n)/);
- var separator = matching ? matching[1] : '';
- var lines = matching ? str.split(separator) : [str];
- var result = hljs.highlight(lang, lines.shift());
- var html = result.value;
+ const matching = str.match(/(\r?\n)/);
+ const separator = matching ? matching[1] : '';
+ const lines = matching ? str.split(separator) : [str];
+ let result = hljs.highlight(lang, lines.shift());
+ let html = result.value;
while (lines.length > 0) {
result = hljs.highlight(lang, lines.shift(), false, result.top);
html += separator + result.value;
diff --git a/lib/html_tag.js b/lib/html_tag.js
index 85510fa7..8c7541f2 100644
--- a/lib/html_tag.js
+++ b/lib/html_tag.js
@@ -3,16 +3,13 @@
function htmlTag(tag, attrs, text) {
if (!tag) throw new TypeError('tag is required!');
- var result = '<' + tag;
+ let result = `<${tag}`;
- for (var i in attrs) {
- if (
- attrs[i] !== undefined
- && attrs[i] !== null
- ) result += ' ' + i + '="' + attrs[i] + '"';
+ for (const i in attrs) {
+ if (attrs[i] != null) result += ` ${i}="${attrs[i]}"`;
}
- result += text == null ? '>' : '>' + text + '' + tag + '>';
+ result += text == null ? '>' : `>${text}${tag}>`;
return result;
}
diff --git a/lib/index.js b/lib/index.js
index eb8fd2ea..1ec2f755 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,6 +1,6 @@
'use strict';
-var hash = require('./hash');
+const hash = require('./hash');
exports.escapeDiacritic = require('./escape_diacritic');
exports.escapeHTML = require('./escape_html');
diff --git a/lib/pattern.js b/lib/pattern.js
index f9d07756..c2eecf8c 100644
--- a/lib/pattern.js
+++ b/lib/pattern.js
@@ -1,8 +1,8 @@
'use strict';
-var escapeRegExp = require('./escape_regexp');
+const escapeRegExp = require('./escape_regexp');
-var rParam = /([:*])([\w?]*)?/g;
+const rParam = /([:*])([\w?]*)?/g;
function Pattern(rule) {
if (rule instanceof Pattern) {
@@ -23,18 +23,16 @@ Pattern.prototype.test = function(str) {
};
function regexFilter(rule) {
- return function(str) {
- return str.match(rule);
- };
+ return str => str.match(rule);
}
function stringFilter(rule) {
- var params = [];
+ const params = [];
- var regex = escapeRegExp(rule)
+ const regex = escapeRegExp(rule)
.replace(/\\([*?])/g, '$1')
- .replace(rParam, function(match, operator, name) {
- var str = '';
+ .replace(rParam, (match, operator, name) => {
+ let str = '';
if (operator === '*') {
str = '(.*)?';
@@ -54,15 +52,14 @@ function stringFilter(rule) {
return str;
});
- return function(str) {
- var match = str.match(regex);
+ return str => {
+ const match = str.match(regex);
if (!match) return;
- var result = {};
- var name;
+ const result = {};
- for (var i = 0, len = match.length; i < len; i++) {
- name = params[i - 1];
+ for (let i = 0, len = match.length; i < len; i++) {
+ const name = params[i - 1];
result[i] = match[i];
if (name) result[name] = match[i];
}
diff --git a/lib/permalink.js b/lib/permalink.js
index 96684579..d574866e 100644
--- a/lib/permalink.js
+++ b/lib/permalink.js
@@ -1,22 +1,22 @@
'use strict';
-var escapeRegExp = require('./escape_regexp');
+const escapeRegExp = require('./escape_regexp');
-var rParam = /:(\w+)/g;
+const rParam = /:(\w+)/g;
function Permalink(rule, options) {
if (!rule) throw new TypeError('rule is required!');
options = options || {};
- var segments = options.segments || {};
- var params = [];
+ const segments = options.segments || {};
+ const params = [];
- var regex = escapeRegExp(rule)
- .replace(rParam, function(match, name) {
+ const regex = escapeRegExp(rule)
+ .replace(rParam, (match, name) => {
params.push(name);
if (segments.hasOwnProperty(name)) {
- var segment = segments[name];
+ const segment = segments[name];
if (segment instanceof RegExp) {
return segment.source;
@@ -29,7 +29,7 @@ function Permalink(rule, options) {
});
this.rule = rule;
- this.regex = new RegExp('^' + regex + '$');
+ this.regex = new RegExp(`^${regex}$`);
this.params = params;
}
@@ -38,13 +38,13 @@ Permalink.prototype.test = function(str) {
};
Permalink.prototype.parse = function(str) {
- var match = str.match(this.regex);
- var params = this.params;
- var result = {};
+ const match = str.match(this.regex);
+ const { params } = this;
+ const result = {};
if (!match) return;
- for (var i = 1, len = match.length; i < len; i++) {
+ for (let i = 1, len = match.length; i < len; i++) {
result[params[i - 1]] = match[i];
}
@@ -52,9 +52,7 @@ Permalink.prototype.parse = function(str) {
};
Permalink.prototype.stringify = function(data) {
- return this.rule.replace(rParam, function(match, name) {
- return data[name];
- });
+ return this.rule.replace(rParam, (match, name) => data[name]);
};
module.exports = Permalink;
diff --git a/lib/slugize.js b/lib/slugize.js
index 73755c46..0a749a7c 100644
--- a/lib/slugize.js
+++ b/lib/slugize.js
@@ -1,27 +1,26 @@
'use strict';
-var escapeDiacritic = require('./escape_diacritic');
-var escapeRegExp = require('./escape_regexp');
+const escapeDiacritic = require('./escape_diacritic');
+const escapeRegExp = require('./escape_regexp');
// eslint-disable-next-line no-control-regex
-var rControl = /[\u0000-\u001f]/g;
-var rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g;
+const rControl = /[\u0000-\u001f]/g;
+const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g;
-function slugize(str, options) {
+function slugize(str, options = {}) {
if (typeof str !== 'string') throw new TypeError('str must be a string!');
- options = options || {};
- var separator = options.separator || '-';
- var escapedSep = escapeRegExp(separator);
+ const separator = options.separator || '-';
+ const escapedSep = escapeRegExp(separator);
- var result = escapeDiacritic(str)
+ const result = escapeDiacritic(str)
// Remove control characters
.replace(rControl, '')
// Replace special characters
.replace(rSpecial, separator)
// Remove continous separators
- .replace(new RegExp(escapedSep + '{2,}', 'g'), separator)
+ .replace(new RegExp(`${escapedSep}{2,}`, 'g'), separator)
// Remove prefixing and trailing separtors
- .replace(new RegExp('^' + escapedSep + '+|' + escapedSep + '+$', 'g'), '');
+ .replace(new RegExp(`^${escapedSep}+|${escapedSep}+$`, 'g'), '');
switch (options.transform) {
case 1:
diff --git a/lib/spawn.js b/lib/spawn.js
index d8ebd0ad..13d2c4af 100644
--- a/lib/spawn.js
+++ b/lib/spawn.js
@@ -1,40 +1,39 @@
'use strict';
-var spawn = require('cross-spawn');
-var Promise = require('bluebird');
-var CacheStream = require('./cache_stream');
+const spawn = require('cross-spawn');
+const Promise = require('bluebird');
+const CacheStream = require('./cache_stream');
-function promiseSpawn(command, args, options) {
+function promiseSpawn(command, args = [], options) {
if (!command) throw new TypeError('command is required!');
- if (!options && args && !Array.isArray(args)) {
+ if (!options && !Array.isArray(args)) {
options = args;
args = [];
}
- args = args || [];
options = options || {};
- return new Promise(function(resolve, reject) {
- var task = spawn(command, args, options);
- var verbose = options.verbose;
- var encoding = options.hasOwnProperty('encoding') ? options.encoding : 'utf8';
- var stdoutCache = new CacheStream();
- var stderrCache = new CacheStream();
+ return new Promise((resolve, reject) => {
+ const task = spawn(command, args, options);
+ const verbose = options.verbose;
+ const { encoding = 'utf8' } = options;
+ const stdoutCache = new CacheStream();
+ const stderrCache = new CacheStream();
if (task.stdout) {
- var stdout = task.stdout.pipe(stdoutCache);
+ const stdout = task.stdout.pipe(stdoutCache);
if (verbose) stdout.pipe(process.stdout);
}
if (task.stderr) {
- var stderr = task.stderr.pipe(stderrCache);
+ const stderr = task.stderr.pipe(stderrCache);
if (verbose) stderr.pipe(process.stderr);
}
- task.on('close', function(code) {
+ task.on('close', code => {
if (code) {
- var e = new Error(getCache(stderrCache, encoding));
+ const e = new Error(getCache(stderrCache, encoding));
e.code = code;
return reject(e);
@@ -47,9 +46,9 @@ function promiseSpawn(command, args, options) {
// Listen to exit events if neither stdout and stderr exist (inherit stdio)
if (!task.stdout && !task.stderr) {
- task.on('exit', function(code) {
+ task.on('exit', code => {
if (code) {
- var e = new Error('Spawn failed');
+ const e = new Error('Spawn failed');
e.code = code;
return reject(e);
@@ -62,7 +61,7 @@ function promiseSpawn(command, args, options) {
}
function getCache(stream, encoding) {
- var buf = stream.getCache();
+ const buf = stream.getCache();
stream.destroy();
if (!encoding) return buf;
diff --git a/lib/truncate.js b/lib/truncate.js
index 50775712..0dbd1dac 100644
--- a/lib/truncate.js
+++ b/lib/truncate.js
@@ -1,24 +1,22 @@
'use strict';
-function truncate(str, options) {
+function truncate(str, options = {}) {
if (typeof str !== 'string') throw new TypeError('str must be a string!');
- options = options || {};
- var length = options.length || 30;
- var omission = options.omission || '...';
- var separator = options.separator;
- var omissionLength = omission.length;
+ const length = options.length || 30;
+ const omission = options.omission || '...';
+ const { separator } = options;
+ const omissionLength = omission.length;
if (str.length < length) return str;
if (separator) {
- var words = str.split(separator);
- var word = '';
- var result = '';
- var resultLength = 0;
+ const words = str.split(separator);
+ let result = '';
+ let resultLength = 0;
- for (var i = 0, len = words.length; i < len; i++) {
- word = words[i];
+ for (let i = 0, len = words.length; i < len; i++) {
+ const word = words[i];
if (resultLength + word.length + omissionLength < length) {
result += word + separator;
diff --git a/lib/word_wrap.js b/lib/word_wrap.js
index 9a552727..23fb6df6 100644
--- a/lib/word_wrap.js
+++ b/lib/word_wrap.js
@@ -1,17 +1,15 @@
'use strict';
// https://github.com/rails/rails/blob/v4.2.0/actionview/lib/action_view/helpers/text_helper.rb#L240
-function wordWrap(str, options) {
+function wordWrap(str, options = {}) {
if (typeof str !== 'string') throw new TypeError('str must be a string!');
- options = options || {};
- var width = options.width || 80;
- var regex = new RegExp('(.{1,' + width + '})(\\s+|$)', 'g');
- var lines = str.split('\n');
- var line = '';
+ const width = options.width || 80;
+ const regex = new RegExp(`(.{1,${width}})(\\s+|$)`, 'g');
+ const lines = str.split('\n');
- for (var i = 0, len = lines.length; i < len; i++) {
- line = lines[i];
+ for (let i = 0, len = lines.length; i < len; i++) {
+ const line = lines[i];
if (line.length > width) {
lines[i] = line.replace(regex, '$1\n').trim();
@@ -22,4 +20,3 @@ function wordWrap(str, options) {
}
module.exports = wordWrap;
-