diff --git a/.eslintrc.json b/.eslintrc.json index 09c66550..c15096ec 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,4 +1,5 @@ { + "parserOptions": { "sourceType": "module" }, "env": { "browser": false, "es6": true, diff --git a/index.js b/index.js index e527003a..7df916e9 100644 --- a/index.js +++ b/index.js @@ -7,13 +7,15 @@ 'use strict'; -var lib = require('./lib/'); +import lib from './lib/index.js'; +// TODO: import only when required +import Handlebars from 'handlebars'; /** * Expose helpers */ -module.exports = function helpers(groups, options) { +export default function helpers(groups, options) { if (typeof groups === 'string') { groups = [groups]; } else if (!Array.isArray(groups)) { @@ -22,17 +24,16 @@ module.exports = function helpers(groups, options) { } options = options || {}; - var hbs = options.handlebars || options.hbs || require('handlebars'); - module.exports.handlebars = hbs; + var hbs = options.handlebars || options.hbs || Handlebars; if (groups) { groups.forEach(function(key) { - hbs.registerHelper(lib[key]); + hbs.registerHelper(Object.assign({}, lib[key])); }); } else { for (const key in lib) { const group = lib[key]; - hbs.registerHelper(group); + hbs.registerHelper(Object.assign({}, group)); } } @@ -42,20 +43,33 @@ module.exports = function helpers(groups, options) { /** * Expose helper groups */ -for (const key in lib) { - const group = lib[key]; - - module.exports[key] = function(options) { +function exportGroup(group) { + group = Object.assign({}, group); + return function(options) { options = options || {}; - var hbs = options.handlebars || options.hbs || require('handlebars'); - module.exports.handlebars = hbs; + var hbs = options.handlebars || options.hbs || Handlebars; hbs.registerHelper(group); return group; - }; -} + }; +}; -/** - * Expose `utils` - */ +export const array = exportGroup(lib.array); +export const code = exportGroup(lib.code); +export const collection = exportGroup(lib.collection); +export const comparison = exportGroup(lib.comparison); +export const html = exportGroup(lib.html); +export const i18n = exportGroup(lib.i18n); +export const inflection = exportGroup(lib.inflection); +export const match = exportGroup(lib.match); +export const math = exportGroup(lib.math); +export const misc = exportGroup(lib.misc); +export const number = exportGroup(lib.number); +export const object = exportGroup(lib.object); +export const path = exportGroup(lib.path); +export const regex = exportGroup(lib.regex); +export const string = exportGroup(lib.string); +export const url = exportGroup(lib.url); +export const uuid = exportGroup(lib.uuid); -module.exports.utils = require('./lib/utils'); +import * as _utils from './lib/utils/index.js'; +export const utils = _utils; diff --git a/lib/array.js b/lib/array.js index db4b1556..d79a5f4f 100644 --- a/lib/array.js +++ b/lib/array.js @@ -1,17 +1,8 @@ 'use strict'; -var util = { - isUndefined: require('./utils/isUndefined'), - result: require('./utils/result'), - value: require('./utils/value'), - indexOf: require('./utils/indexOf'), - isString: require('./utils/isString'), - isOptions: require('./utils/isOptions'), - isObject: require('./utils/isObject') -}; -var helpers = module.exports; -const getValue = require('get-value'); -const createFrame = require('./utils/createFrame'); +import * as util from './utils/index.js'; +import getValue from 'get-value'; +import createFrame from './utils/createFrame.js'; /** * Returns all of the items in an array after the specified index. @@ -29,14 +20,14 @@ const createFrame = require('./utils/createFrame'); * @example {{ after ['a', 'b', 'c', 'd'] 2}} -> ['c', 'd'] */ -helpers.after = function(array, n) { +export function after(array, n) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { return array.slice(n); } return ''; -}; +} /** * Cast the given `value` to an array. @@ -51,10 +42,10 @@ helpers.after = function(array, n) { * @example {{ arrayify 'foo' }} -> ['foo'] */ -helpers.arrayify = function(value) { +export function arrayify(value) { if (util.isUndefined(value)) return []; return value ? (Array.isArray(value) ? value : [value]) : []; -}; +} /** * Return all of the items in the collection before the specified @@ -72,14 +63,14 @@ helpers.arrayify = function(value) { * @example {{ before ['a', 'b', 'c', 'd'] 3}} -> ['a', 'b'] */ -helpers.before = function(array, n) { +export function before(array, n) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { return array.slice(0, n - 1); } return ''; -}; +} /** * ```handlebars @@ -96,7 +87,7 @@ helpers.before = function(array, n) { * @example {{#eachIndex [1, 2, 3]}} {{item}} is {{index}} {{/eachIndex}} -> ' 1 is 0 2 is 1 3 is 2 ' */ -helpers.eachIndex = function(array, options) { +export function eachIndex(array, options) { var result = ''; if (util.isUndefined(array)) return ''; array = util.result(array); @@ -106,7 +97,7 @@ helpers.eachIndex = function(array, options) { } } return result; -}; +} /** * Block helper that filters the given array and renders the block for values that @@ -126,7 +117,7 @@ helpers.eachIndex = function(array, options) { * @example {{#filter [1, 2, 3] 2}}2 Found{{else}}2 not found{{/filter}} -> 2 Found */ -helpers.filter = function(array, value, options) { +export function filter(array, value, options) { if (util.isUndefined(array)) return options.inverse(this); array = util.result(array); if (Array.isArray(array)) { @@ -154,7 +145,7 @@ helpers.filter = function(array, value, options) { } } return options.inverse(this); -}; +} /** * Returns the first item, or first `n` items of an array. @@ -170,7 +161,7 @@ helpers.filter = function(array, value, options) { * @example {{first [1, 2, 3, 4] 2}} -> 1,2 */ -helpers.first = function(array, n) { +export function first(array, n) { if (util.isUndefined(array)) return []; array = util.result(array); if (Array.isArray(array)) { @@ -180,7 +171,7 @@ helpers.first = function(array, n) { return array.slice(0, n); } return []; -}; +} /** * Iterates over each item in an array and exposes the current item @@ -218,7 +209,7 @@ helpers.first = function(array, n) { * @example {{#forEach [{ 'name': 'John' }] }} {{ name }} {{/forEach}} -> ' John ' */ -helpers.forEach = function(array, options) { +export function forEach(array, options) { if (util.isUndefined(array)) return options.inverse(this); array = util.result(array); if (Array.isArray(array)) { @@ -239,7 +230,7 @@ helpers.forEach = function(array, options) { return buffer; } return options.inverse(this); -}; +} /** * Block helper that renders the block if an array has the @@ -264,14 +255,14 @@ helpers.forEach = function(array, options) { * @example {{#inArray [1, 2, 3] 2}} 2 exists {{else}} 2 does not exist {{/inArray}} -> ' 2 exists ' */ -helpers.inArray = function(array, value, options) { +export function inArray(array, value, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { return util.value(util.indexOf(array, value) > -1, this, options); } return ''; -}; +} /** * Returns true if `value` is an es5 array. @@ -290,9 +281,9 @@ helpers.inArray = function(array, value, options) { * @example {{isArray [1, 2]}} -> true */ -helpers.isArray = function(value) { +export function isArray(value) { return Array.isArray(value); -}; +} /** * Returns the item from `array` at index `idx`. @@ -309,7 +300,7 @@ helpers.isArray = function(value) { * @example {{itemAt [1, 2, 3] 1}} -> 2 */ -helpers.itemAt = function(array, idx) { +export function itemAt(array, idx) { if (util.isUndefined(array)) return null; array = util.result(array); if (Array.isArray(array)) { @@ -322,7 +313,7 @@ helpers.itemAt = function(array, idx) { } } return null; -}; +} /** * Join all elements of array into a string, optionally using a @@ -343,7 +334,7 @@ helpers.itemAt = function(array, idx) { * @example {{join [1, 2, 3]}} -> 1, 2, 3 */ -helpers.join = function(array, separator) { +export function join(array, separator) { if (util.isUndefined(array)) return ''; if (typeof array === 'string') return array; array = util.result(array); @@ -352,7 +343,7 @@ helpers.join = function(array, separator) { return array.join(separator); } return ''; -}; +} /** * Returns true if the the length of the given `value` is equal @@ -367,16 +358,16 @@ helpers.join = function(array, separator) { * @example {{equalsLength [1, 2, 3] 3}} -> true */ -helpers.equalsLength = function(value, length, options) { +export function equalsLength(value, length, options) { if (util.isOptions(length)) { options = length; length = 0; } - var len = helpers.length(value); + var len = _length(value); return util.value(len === length, this, options); -}; +} /** * Returns the last item, or last `n` items of an array or string. @@ -401,7 +392,7 @@ helpers.equalsLength = function(value, length, options) { * @example {{last [1, 2, 3]}} -> 3 */ -helpers.last = function(array, n) { +export function last(array, n) { if (util.isUndefined(array)) return ''; if (!Array.isArray(array) && typeof value !== 'string') { return ''; @@ -410,7 +401,7 @@ helpers.last = function(array, n) { return array[array.length - 1]; } return array.slice(-Math.abs(n)); -}; +} /** * Returns the length of the given string or array. @@ -433,17 +424,15 @@ helpers.last = function(array, n) { * @example {{length [1, 2, 3]}} -> 3 */ -helpers.length = function(array) { +const _length = function(array) { if (util.isUndefined(array)) return 0; if (util.isObject(array) && !util.isOptions(array)) { array = Object.keys(array); } // this is an inline array, split it - if ( - typeof array === 'string' && + if (typeof array === 'string' && array.startsWith('[') && - array.endsWith(']') - ) { + array.endsWith(']')) { return array.split(',').length; } if (typeof array === 'string' || Array.isArray(array)) { @@ -451,14 +440,9 @@ helpers.length = function(array) { } return 0; }; +export { _length as length }; -/** - * Alias for [equalsLength](#equalsLength) - * - * @api public - */ - -helpers.lengthEqual = helpers.equalsLength; +export const lengthEqual = equalsLength; /** * Returns a new array, created by calling `function` on each @@ -478,7 +462,7 @@ helpers.lengthEqual = helpers.equalsLength; * @example {{map [1, 2, 3] double}} -> [2, 4, 6] */ -helpers.map = function(array, iter) { +export function map(array, iter) { if (util.isUndefined(array)) return ''; if (!Array.isArray(array)) return ''; var len = array.length; @@ -493,7 +477,7 @@ helpers.map = function(array, iter) { res[i] = iter(array[i], i, array); } return res; -}; +} /** * Map over the given object or array or objects and create an array of values @@ -511,7 +495,7 @@ helpers.map = function(array, iter) { * @example {{pluck [{ 'name': 'Bob' }] 'name' }} -> ['Bob'] */ -helpers.pluck = function(array, prop) { +export function pluck(array, prop) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -525,7 +509,7 @@ helpers.pluck = function(array, prop) { return res; } return ''; -}; +} /** * Reverse the elements in an array, or the characters in a string. @@ -543,7 +527,7 @@ helpers.pluck = function(array, prop) { * @api public * @example {{reverse [1, 2, 3]}} -> [3, 2, 1] */ -helpers.reverse = function(array) { +export function reverse(array) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -553,7 +537,7 @@ helpers.reverse = function(array) { return array.split('').reverse().join(''); } return ''; -}; +} /** * Block helper that returns the block if the callback returns true @@ -577,7 +561,7 @@ helpers.reverse = function(array) { * @example {{#some [1, "b", 3] isString}} string found {{else}} No string found {{/some}} -> ' string found ' */ -helpers.some = function(array, iter, options) { +export function some(array, iter, options) { if (util.isUndefined(array)) return options.inverse(this); array = util.result(array); if (Array.isArray(array)) { @@ -588,7 +572,7 @@ helpers.some = function(array, iter, options) { } } return options.inverse(this); -}; +} /** * Sort the given `array`. If an array of objects is passed, @@ -608,7 +592,7 @@ helpers.some = function(array, iter, options) { * @example {{ sort ['b', 'a', 'c'] }} -> ['a', 'b', 'c'] */ -helpers.sort = function(array, options) { +export function sort(array, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -618,7 +602,7 @@ helpers.sort = function(array, options) { return [...array].sort(); } return ''; -}; +} /** * Sort an `array`. If an array of objects is passed, @@ -638,7 +622,7 @@ helpers.sort = function(array, options) { * @example {{ sortBy [{'a': 'zzz'}, {'a': 'aaa'}] 'a' }} -> [{'a':'aaa'},{'a':'zzz'}] */ -helpers.sortBy = function(array, prop, options) { +export function sortBy(array, prop, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -657,7 +641,7 @@ helpers.sortBy = function(array, prop, options) { return [...array].sort((a, b) => (a[prop] > b[prop] ? 1 : -1)); } return ''; -}; +} /** * Use the items in the array _after_ the specified index @@ -679,7 +663,7 @@ helpers.sortBy = function(array, prop, options) { * @example {{#withAfter [1, 2, 3] 1 }} {{this}} {{/withAfter}} -> ' 2 3 ' */ -helpers.withAfter = function(array, idx, options) { +export function withAfter(array, idx, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -692,7 +676,7 @@ helpers.withAfter = function(array, idx, options) { return result; } return ''; -}; +} /** * Use the items in the array _before_ the specified index @@ -714,7 +698,7 @@ helpers.withAfter = function(array, idx, options) { * @example {{#withBefore [1, 2, 3] 2 }} {{this}} {{/withBefore}} -> ' 1 ' */ -helpers.withBefore = function(array, idx, options) { +export function withBefore(array, idx, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -727,7 +711,7 @@ helpers.withBefore = function(array, idx, options) { return result; } return ''; -}; +} /** * Use the first item in a collection inside a handlebars @@ -749,7 +733,7 @@ helpers.withBefore = function(array, idx, options) { * @example {{#withFirst [1, 2, 3] }}{{this}}{{/withFirst}} -> 1 */ -helpers.withFirst = function(array, idx, options) { +export function withFirst(array, idx, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -770,7 +754,7 @@ helpers.withFirst = function(array, idx, options) { return result; } return ''; -}; +} /** * Block helper that groups array elements by given group `size`. @@ -796,7 +780,7 @@ helpers.withFirst = function(array, idx, options) { * @example {{#withGroup [1, 2, 3, 4] 2}}{{#each this}}{{.}}{{/each}}
{{/withGroup}} -> 12
34
* */ -helpers.withGroup = function(array, size, options) { +export function withGroup(array, size, options) { if (util.isUndefined(array)) return ''; var result = ''; array = util.result(array); @@ -812,7 +796,7 @@ helpers.withGroup = function(array, size, options) { result += options.fn(subcontext); } return result; -}; +} /** * Use the last item or `n` items in an array as context inside a block. @@ -833,7 +817,7 @@ helpers.withGroup = function(array, size, options) { * @example {{#withLast [1, 2, 3, 4]}}{{this}}{{/withLast}} -> 4 */ -helpers.withLast = function(array, idx, options) { +export function withLast(array, idx, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -856,7 +840,7 @@ helpers.withLast = function(array, idx, options) { return result; } return ''; -}; +} /** * Block helper that sorts a collection and exposes the sorted @@ -876,7 +860,7 @@ helpers.withLast = function(array, idx, options) { * @example {{#withSort ['b', 'a', 'c']}}{{this}}{{/withSort}} -> abc */ -helpers.withSort = function(array, prop, options) { +export function withSort(array, prop, options) { if (util.isUndefined(array)) return ''; array = util.result(array); if (Array.isArray(array)) { @@ -914,7 +898,7 @@ helpers.withSort = function(array, prop, options) { return result; } return ''; -}; +} /** * Block helper that return an array with all duplicate @@ -933,7 +917,7 @@ helpers.withSort = function(array, prop, options) { * @example {{#each (unique ['a', 'a', 'c', 'b', 'e', 'e']) }}{{.}}{{/each}} -> acbe */ -helpers.unique = function(array, options) { +export function unique(array, options) { if (util.isUndefined(array)) return ''; array = util.result(array); @@ -943,4 +927,4 @@ helpers.unique = function(array, options) { }); } return ''; -}; +} diff --git a/lib/code.js b/lib/code.js index d665c03b..92510bc1 100644 --- a/lib/code.js +++ b/lib/code.js @@ -1,10 +1,9 @@ 'use strict'; -var fs = require('fs'); -var path = require('path'); -const codeBlock = require('to-gfm-code-block'); -const htmlTag = require('html-tag'); -var helpers = module.exports; +import { readFileSync } from 'fs'; +import { extname } from 'path'; +import codeBlock from 'to-gfm-code-block'; +import htmlTag from 'html-tag'; /** * Embed code from an external file as preformatted text. @@ -21,16 +20,16 @@ var helpers = module.exports; * @api public */ -helpers.embed = function embed(filepath, ext) { - ext = typeof ext !== 'string' ? path.extname(filepath).slice(1) : ext; - var code = fs.readFileSync(filepath, 'utf8'); +export function embed(filepath, ext) { + ext = typeof ext !== 'string' ? extname(filepath).slice(1) : ext; + var code = readFileSync(filepath, 'utf8'); if (ext === 'markdown' || ext === 'md') { ext = 'markdown'; // if the string is markdown, escape backticks code = code.split('`').join('`'); } return codeBlock(code, ext).trim() + '\n'; -}; +} /** * Embed a GitHub Gist using only the id of the Gist @@ -43,22 +42,11 @@ helpers.embed = function embed(filepath, ext) { * @api public */ -helpers.gist = function(id) { +export function gist(id) { return htmlTag('script', {src: 'https://gist.github.com/' + id + '.js'}); -}; - -/** - * Generate the HTML for a jsFiddle link with the given `params` - * - * ```handlebars - * {{jsfiddle id='0dfk10ks' tabs='true'}} - * ``` - * @param {Object} `params` - * @return {String} - * @api public - */ +} -helpers.jsfiddle = function jsFiddle(options) { +export const jsfiddle = function jsFiddle(options) { var attr = Object.assign({}, options && options.hash); if (typeof attr.id === 'undefined') { diff --git a/lib/collection.js b/lib/collection.js index 6cb87f1d..c23ffa21 100644 --- a/lib/collection.js +++ b/lib/collection.js @@ -1,11 +1,9 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var object = require('./object'); -var array = require('./array'); -var forEach = array.forEach; -var forOwn = object.forOwn; -var helpers = module.exports; +import { isOptions, fn, isObject } from './utils/index.js'; +import { forOwn } from './object.js'; +import { forEach } from './array.js'; +import value from './utils/value.js'; /** * Inline, subexpression, or block helper that returns true (or the block) @@ -28,20 +26,20 @@ var helpers = module.exports; * @api public */ -helpers.isEmpty = function(collection, options) { - if (!util.isOptions(options)) { +export function isEmpty(collection, options) { + if (!isOptions(options)) { options = collection; - return util.fn(true, this, options); + return fn(true, this, options); } if (Array.isArray(collection) && !collection.length) { - return util.fn(true, this, options); + return fn(true, this, options); } var keys = Object.keys(collection); var isEmpty = typeof collection === 'object' && !keys.length; - return util.value(isEmpty, this, options); -}; + return value(isEmpty, this, options); +} /** * Block helper that iterates over an array or object. If @@ -56,12 +54,12 @@ helpers.isEmpty = function(collection, options) { * @api public */ -helpers.iterate = function(collection, options) { +export function iterate(collection, options) { if (Array.isArray(collection)) { return forEach.apply(null, arguments); } - if (util.isObject(collection)) { + if (isObject(collection)) { return forOwn.apply(null, arguments); } return options.inverse(this); -}; +} diff --git a/lib/comparison.js b/lib/comparison.js index cad8c9a8..5335610a 100644 --- a/lib/comparison.js +++ b/lib/comparison.js @@ -1,18 +1,10 @@ 'use strict'; -var has = require('has-value'); -var util = { - value: require('./utils/value'), - isOptions: require('./utils/isOptions'), - isString: require('./utils/isString'), - fn: require('./utils/fn'), - isObject: require('./utils/isObject'), - inverse: require('./utils/inverse') -}; -var utils = require('./utils'); -const falsey = require('./utils/falsey'); -const isOdd = require('./utils/odd'); -var helpers = module.exports; +import has from 'has-value'; + +import * as util from './utils/index.js'; +import falsey from './utils/falsey.js'; +import isOdd from './utils/odd.js'; /** * Helper that renders the block if **both** of the given values @@ -34,7 +26,7 @@ var helpers = module.exports; * @example {{#and great magnificent}}both{{else}}no{{/and}} -> no */ -helpers.and = function() { +export function and() { var len = arguments.length - 1; var options = arguments[len]; var val = true; @@ -47,7 +39,7 @@ helpers.and = function() { } return util.value(val, this, options); -}; +} /** * Render a block when a comparison of the first and third @@ -66,7 +58,7 @@ helpers.and = function() { * @example {{compare 10 '<' 5 }} -> false */ -helpers.compare = function(a, operator, b, options) { +export function compare(a, operator, b, options) { /*eslint eqeqeq: 0*/ if (arguments.length < 4) { @@ -110,7 +102,7 @@ helpers.compare = function(a, operator, b, options) { } return util.value(result, this, options); -}; +} /** * Block helper that renders the block if `collection` has the @@ -136,14 +128,14 @@ helpers.compare = function(a, operator, b, options) { * @example {{#contains ['a', 'b', 'c'] 'd'}} This will not be rendered. {{else}} This will be rendered. {{/contains}} -> ' This will be rendered. ' */ -helpers.contains = function(collection, value, startIndex, options) { +export function contains(collection, value, startIndex, options) { if (typeof startIndex === 'object') { options = startIndex; startIndex = undefined; } - var val = utils.contains(collection, value, startIndex); + var val = util.contains(collection, value, startIndex); return util.value(val, this, options); -}; +} /** * Returns the first value that is not undefined, otherwise the 'default' value is returned. @@ -156,12 +148,13 @@ helpers.contains = function(collection, value, startIndex, options) { * @example {{default null null 'default'}} -> default */ -helpers.default = function() { +const _default = function() { for (var i = 0; i < arguments.length - 1; i++) { if (arguments[i] != null) return arguments[i]; } return ''; }; +export { _default as default }; /** * Block helper that renders a block if `a` is **equal to** `b`. @@ -179,13 +172,13 @@ helpers.default = function() { * @example {{#eq 3 3}}equal{{else}}not equal{{/eq}} -> equal */ -helpers.eq = function(a, b, options) { +export function eq(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a === b, this, options); -}; +} /** * Block helper that renders a block if `a` is **greater than** `b`. @@ -203,13 +196,13 @@ helpers.eq = function(a, b, options) { * @example {{#gt 4 3}} greater than{{else}} not greater than{{/gt}} -> ' greater than' */ -helpers.gt = function(a, b, options) { +export function gt(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a > b, this, options); -}; +} /** * Block helper that renders a block if `a` is **greater than or @@ -228,13 +221,13 @@ helpers.gt = function(a, b, options) { * @example {{#gte 4 3}} greater than or equal{{else}} not greater than{{/gte}} -> ' greater than or equal' */ -helpers.gte = function(a, b, options) { +export function gte(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a >= b, this, options); -}; +} /** * Block helper that renders a block if `value` has `pattern`. @@ -249,7 +242,7 @@ helpers.gte = function(a, b, options) { * @example {{#has 'foobar' 'foo'}}has it{{else}}doesn't{{/has}} -> has it */ -helpers.has = function(value, pattern, options) { +const _has = function(value, pattern, options) { if (util.isOptions(value)) { options = value; pattern = null; @@ -269,10 +262,8 @@ helpers.has = function(value, pattern, options) { return util.value(has(this, value), this, options); } - if ( - (Array.isArray(value) || util.isString(value)) && - util.isString(pattern) - ) { + if ((Array.isArray(value) || util.isString(value)) && + util.isString(pattern)) { if (value.indexOf(pattern) > -1) { return util.fn(true, this, options); } @@ -282,6 +273,7 @@ helpers.has = function(value, pattern, options) { } return util.inverse(false, this, options); }; +export { _has as has }; /** * Returns true if the given `value` is falsey. Uses the [falsey][] @@ -295,9 +287,9 @@ helpers.has = function(value, pattern, options) { * @example {{isFalsey '' }} -> true */ -helpers.isFalsey = function(val, options) { +export function isFalsey(val, options) { return util.value(falsey(val), this, options); -}; +} /** * Returns true if the given `value` is truthy. Uses the [falsey][] @@ -311,9 +303,9 @@ helpers.isFalsey = function(val, options) { * @example {{isTruthy '12' }} -> true */ -helpers.isTruthy = function(val, options) { +export function isTruthy(val, options) { return util.value(!falsey(val), this, options); -}; +} /** * Return true if the given value is an even number. @@ -333,9 +325,9 @@ helpers.isTruthy = function(val, options) { * @example {{#ifEven 2}} even {{else}} odd {{/ifEven}} -> ' even ' */ -helpers.ifEven = function(num, options) { +export function ifEven(num, options) { return util.value(!isOdd(num), this, options); -}; +} /** * Conditionally renders a block if the remainder is zero when @@ -351,10 +343,10 @@ helpers.ifEven = function(num, options) { * @example {{#ifNth 2 10}}remainder{{else}}no remainder{{/ifNth}} -> remainder */ -helpers.ifNth = function(a, b, options) { +export function ifNth(a, b, options) { var isNth = !isNaN(a) && !isNaN(b) && b % a === 0; return util.value(isNth, this, options); -}; +} /** * Block helper that renders a block if `value` is **an odd number**. @@ -375,9 +367,9 @@ helpers.ifNth = function(a, b, options) { * @example {{#ifOdd 3}}odd{{else}}even{{/ifOdd}} -> odd */ -helpers.ifOdd = function(val, options) { +export function ifOdd(val, options) { return util.value(isOdd(val), this, options); -}; +} /** * Block helper that renders a block if `a` is **equal to** `b`. @@ -393,13 +385,13 @@ helpers.ifOdd = function(val, options) { * @example {{#is 3 3}} is {{else}} is not {{/is}} -> ' is ' */ -helpers.is = function(a, b, options) { +export function is(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a == b, this, options); -}; +} /** * Block helper that renders a block if `a` is **not equal to** `b`. @@ -416,13 +408,13 @@ helpers.is = function(a, b, options) { * @example {{#isnt 3 3}} isnt {{else}} is {{/isnt}} -> ' is ' */ -helpers.isnt = function(a, b, options) { +export function isnt(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a != b, this, options); -}; +} /** * Block helper that renders a block if `a` is **less than** `b`. @@ -439,13 +431,13 @@ helpers.isnt = function(a, b, options) { * @example {{#lt 2 3}} less than {{else}} more than or equal {{/lt}} -> ' less than ' */ -helpers.lt = function(a, b, options) { +export function lt(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a < b, this, options); -}; +} /** * Block helper that renders a block if `a` is **less than or @@ -464,13 +456,13 @@ helpers.lt = function(a, b, options) { * @example {{#lte 2 3}} less than or equal {{else}} more than {{/lte}} -> ' less than or equal ' */ -helpers.lte = function(a, b, options) { +export function lte(a, b, options) { if (arguments.length === 2) { options = b; b = options.hash.compare; } return util.value(a <= b, this, options); -}; +} /** * Block helper that renders a block if **neither of** the given values @@ -486,9 +478,9 @@ helpers.lte = function(a, b, options) { * @example {{#neither null null}}both falsey{{else}}both not falsey{{/neither}} -> both falsey */ -helpers.neither = function(a, b, options) { +export function neither(a, b, options) { return util.value(!a && !b, this, options); -}; +} /** * Returns true if `val` is falsey. Works as a block or inline helper. @@ -501,9 +493,9 @@ helpers.neither = function(a, b, options) { * @example {{#not undefined }}falsey{{else}}not falsey{{/not}} -> falsey */ -helpers.not = function(val, options) { +export function not(val, options) { return util.value(!val, this, options); -}; +} /** * Block helper that renders a block if **any of** the given values @@ -524,7 +516,7 @@ helpers.not = function(val, options) { * @example {{#or 1 2 undefined }} at least one truthy {{else}} all falsey {{/or}} -> ' at least one truthy ' */ -helpers.or = function(/* any, any, ..., options */) { +export function or(/* any, any, ..., options */) { var len = arguments.length - 1; var options = arguments[len]; var val = false; @@ -536,7 +528,7 @@ helpers.or = function(/* any, any, ..., options */) { } } return util.value(val, this, options); -}; +} /** * Block helper that always renders the inverse block **unless `a` is @@ -551,13 +543,13 @@ helpers.or = function(/* any, any, ..., options */) { * @example {{#unlessEq 2 1 }} not equal {{else}} equal {{/unlessEq}} -> ' not equal ' */ -helpers.unlessEq = function(a, b, options) { +export function unlessEq(a, b, options) { if (util.isOptions(b)) { options = b; b = options.hash.compare; } return util.value(a !== b, this, options); -}; +} /** * Block helper that always renders the inverse block **unless `a` is @@ -572,13 +564,13 @@ helpers.unlessEq = function(a, b, options) { * @example {{#unlessGt 20 1 }} not greater than {{else}} greater than {{/unlessGt}} -> ' greater than ' */ -helpers.unlessGt = function(a, b, options) { +export function unlessGt(a, b, options) { if (util.isOptions(b)) { options = b; b = options.hash.compare; } return util.value(a <= b, this, options); -}; +} /** * Block helper that always renders the inverse block **unless `a` is @@ -593,13 +585,13 @@ helpers.unlessGt = function(a, b, options) { * @example {{#unlessLt 20 1 }}greater than or equal{{else}}less than{{/unlessLt}} -> greater than or equal */ -helpers.unlessLt = function(a, b, options) { +export function unlessLt(a, b, options) { if (util.isOptions(b)) { options = b; b = options.hash.compare; } return util.value(a >= b, this, options); -}; +} /** * Block helper that always renders the inverse block **unless `a` is @@ -614,13 +606,13 @@ helpers.unlessLt = function(a, b, options) { * @example {{#unlessGteq 20 1 }} less than {{else}}greater than or equal to{{/unlessGteq}} -> greater than or equal to */ -helpers.unlessGteq = function(a, b, options) { +export function unlessGteq(a, b, options) { if (util.isOptions(b)) { options = b; b = options.hash.compare; } return util.value(a < b, this, options); -}; +} /** * Block helper that always renders the inverse block **unless `a` is @@ -635,10 +627,10 @@ helpers.unlessGteq = function(a, b, options) { * @example {{#unlessLteq 20 1 }} greater than {{else}} less than or equal to {{/unlessLteq}} -> ' greater than ' */ -helpers.unlessLteq = function(a, b, options) { +export function unlessLteq(a, b, options) { if (util.isOptions(b)) { options = b; b = options.hash.compare; } return util.value(a > b, this, options); -}; +} diff --git a/lib/fs.js b/lib/fs.js index 6460a6de..16bfcd41 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1,19 +1,15 @@ 'use strict'; -var fs = require('fs'); -var path = require('path'); -var util = require('./utils/handlebarsUtils'); -var number = require('./number'); -var helpers = module.exports; -const kindOf = require('kind-of'); -const isGlob = require('is-glob'); -const micromatch = require('micromatch'); +import { readFileSync, readdirSync, statSync } from 'fs'; +import { join } from 'path'; +import { isOptions } from './utils/handlebarsUtils'; +import { bytes } from './number'; -/** - * Helper `fileSize` is deprecated. Use `helper.prettyBytes` instead. - */ +import kindOf from 'kind-of'; +import isGlob from 'is-glob'; +import { matcher } from 'micromatch'; -helpers.fileSize = number.bytes; +export const fileSize = bytes; /** * Read a file from the file system. This is useful in composing @@ -28,9 +24,9 @@ helpers.fileSize = number.bytes; * @api public */ -helpers.read = function(filepath, options) { - return fs.readFileSync(filepath, 'utf8'); -}; +export function read(filepath, options) { + return readFileSync(filepath, 'utf8'); +} /** * Return an array of files from the given @@ -41,12 +37,12 @@ helpers.read = function(filepath, options) { * @api public */ -helpers.readdir = function(dir, filter) { - var files = fs.readdirSync(dir); +export function readdir(dir, filter) { + var files = readdirSync(dir); files = files.map(function(fp) { - return path.join(dir, fp); + return join(dir, fp); }); - if (util.isOptions(filter)) { + if (isOptions(filter)) { return files; } if (typeof filter === 'function') { @@ -58,13 +54,13 @@ helpers.readdir = function(dir, filter) { }); } if (isGlob(filter)) { - return files.filter(micromatch.matcher(filter)); + return files.filter(matcher(filter)); } if (['isFile', 'isDirectory'].indexOf(filter) !== -1) { return files.filter(function(fp) { - var stat = fs.statSync(fp); + var stat = statSync(fp); return stat[filter](); }); } return files; -}; +} diff --git a/lib/html.js b/lib/html.js index 208ee07a..23e96c8b 100644 --- a/lib/html.js +++ b/lib/html.js @@ -1,11 +1,11 @@ 'use strict'; -var path = require('path'); -var util = require('./utils/handlebarsUtils'); -var html = require('./utils/html'); -var parseAttr = html.parseAttributes; -var helpers = module.exports; -const htmlTag = require('html-tag'); +import { extname, posix } from 'path'; +import { arrayify } from './utils/index.js'; +import { parseAttributes, sanitize as htmlSanitize } from './utils/html.js'; +var parseAttr = parseAttributes; + +import htmlTag from 'html-tag'; /** * Stringify attributes on the options `hash`. @@ -20,10 +20,10 @@ const htmlTag = require('html-tag'); * @api public */ -helpers.attr = function(options) { +export function attr(options) { var val = parseAttr((options && options.hash) || {}); return val.trim() ? ' ' + val : ''; -}; +} /** * Add an array of `` tags. Automatically resolves @@ -42,13 +42,13 @@ helpers.attr = function(options) { * @api public */ -helpers.css = function(list, options) { +export function css(list, options) { if (arguments.length < 2) { options = list; list = []; } - var styles = util.arrayify(list); + var styles = arrayify(list); var assets = ''; if (this && this.options) { @@ -56,15 +56,15 @@ helpers.css = function(list, options) { } if (options.hash.href) { - styles = util.arrayify(options.hash.href); + styles = arrayify(options.hash.href); } return styles.map(function(item) { - var ext = path.extname(item); + var ext = extname(item); var fp = item; if (!/(^\/\/)|(:\/\/)/.test(item)) { - fp = path.posix.join(assets, item); + fp = posix.join(assets, item); } if (ext === '.less') { @@ -72,7 +72,7 @@ helpers.css = function(list, options) { } return ``; }).join('\n'); -}; +} /** * Generate one or more `` tags with paths/urls to @@ -86,7 +86,7 @@ helpers.css = function(list, options) { * @api public */ -helpers.js = function(context) { +export function js(context) { if (typeof context === 'object' && context.hash) { var attr = parseAttr(context.hash); return ``; @@ -96,13 +96,13 @@ helpers.js = function(context) { return ``; } - context = util.arrayify(context); + context = arrayify(context); return context.map(function(fp) { - return (path.extname(fp) === '.coffee') + return (extname(fp) === '.coffee') ? htmlTag('script', { type: 'text/coffeescript', src: fp }) : htmlTag('script', { src: fp }); }).join('\n'); -}; +} /** * Strip HTML tags from a string, so that only the text nodes @@ -118,9 +118,9 @@ helpers.js = function(context) { * @api public */ -helpers.sanitize = function(str) { - return html.sanitize(str); -}; +export function sanitize(str) { + return htmlSanitize(str); +} /** * Block helper for creating unordered lists (``) @@ -132,14 +132,14 @@ helpers.sanitize = function(str) { * @api public */ -helpers.ul = function(context, options) { +export function ul(context, options) { return (''; -}; +} /** * Block helper for creating ordered lists (`
    `) @@ -151,14 +151,14 @@ helpers.ul = function(context, options) { * @api public */ -helpers.ol = function(context, options) { +export function ol(context, options) { return ('
      ') + context.map(function(item) { if (typeof item !== 'string') { item = options.fn(item); } return '
    1. ' + item + '
    2. '; }).join('\n') + '
    '; -}; +} /** * Returns a `
    ` with a thumbnail linked to a full picture @@ -173,7 +173,7 @@ helpers.ol = function(context, options) { * @api public */ -helpers.thumbnailImage = function(context) { +export function thumbnailImage(context) { var figure = ''; var image = ''; @@ -215,4 +215,4 @@ helpers.thumbnailImage = function(context) { figure += '
    '; return figure; -}; +} diff --git a/lib/i18n.js b/lib/i18n.js index 1b4a8d66..61d047d7 100644 --- a/lib/i18n.js +++ b/lib/i18n.js @@ -1,8 +1,7 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var helpers = module.exports; -const getValue = require('get-value'); +import * as utils from './utils/index.js'; +import getValue from 'get-value'; /** * i18n helper. See [button-i18n](https://github.com/assemble/buttons) @@ -15,17 +14,17 @@ const getValue = require('get-value'); * @api public */ -helpers.i18n = function(prop, locals, options) { - if (util.isOptions(locals)) { +export function i18n(prop, locals, options) { + if (utils.isOptions(locals)) { options = locals; locals = {}; } - if (!util.isString(prop)) { + if (!utils.isString(prop)) { throw new Error('{{i18n}} helper expected "key" to be a string'); } - var opts = util.options(this, locals, options); + var opts = utils.options(this, locals, options); var context = Object.assign({}, this, opts); var lang = context.language || context.lang; @@ -45,4 +44,4 @@ helpers.i18n = function(prop, locals, options) { } return result; -}; +} diff --git a/lib/index.js b/lib/index.js index f5ab2e30..ca2f9f4a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,24 +1,39 @@ 'use strict'; -module.exports = { - array: require('./array'), - code: require('./code'), - collection: require('./collection'), - comparison: require('./comparison'), - //date: require('./date'), - //fs: require('./fs'), - html: require('./html'), - i18n: require('./i18n'), - inflection: require('./inflection'), - //markdown: require('./markdown'), - match: require('./match'), - math: require('./math'), - misc: require('./misc'), - number: require('./number'), - object: require('./object'), - path: require('./path'), - regex: require('./regex'), - string: require('./string'), - url: require('./url'), - uuid: require('./uuid') +import * as array from './array.js'; +import * as code from './code.js'; +import * as collection from './collection.js'; +import * as comparison from './comparison.js'; +import * as html from './html.js'; +import * as i18n from './i18n.js'; +import * as inflection from './inflection.js'; +import * as match from './match.js'; +import * as math from './math.js'; +import * as misc from './misc.js'; +import * as number from './number.js'; +import * as object from './object.js'; +import * as path from './path.js'; +import * as regex from './regex.js'; +import * as string from './string.js'; +import * as url from './url.js'; +import * as uuid from './uuid.js'; + +export default { + array, + code, + collection, + comparison, + html, + i18n, + inflection, + match, + math, + misc, + number, + object, + path, + regex, + string, + url, + uuid }; diff --git a/lib/inflection.js b/lib/inflection.js index b518b98e..ec1490ae 100644 --- a/lib/inflection.js +++ b/lib/inflection.js @@ -1,7 +1,6 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var helpers = module.exports; +import { indexOf } from './utils/index.js'; /** * Returns either the `singular` or `plural` inflection of a word based on @@ -27,14 +26,14 @@ var helpers = module.exports; * @api public */ -helpers.inflect = function(count, singular, plural, includeCount) { +export function inflect(count, singular, plural, includeCount) { var word = (count > 1 || count === 0) ? plural : singular; if (includeCount === true) { return String(count) + ' ' + word; } else { return word; } -}; +} /** * Returns an ordinalized number as a string. @@ -55,12 +54,12 @@ helpers.inflect = function(count, singular, plural, includeCount) { * @api public */ -helpers.ordinalize = function(val) { +export function ordinalize(val) { var num = Math.abs(Math.round(val)); var str = String(val); var res = num % 100; - if (util.indexOf([11, 12, 13], res) >= 0) { + if (indexOf([11, 12, 13], res) >= 0) { return str + 'th'; } @@ -75,4 +74,4 @@ helpers.ordinalize = function(val) { return str + 'th'; } } -}; +} diff --git a/lib/match.js b/lib/match.js index 049c99ff..f7823fe9 100644 --- a/lib/match.js +++ b/lib/match.js @@ -1,8 +1,8 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var helpers = module.exports; -const micromatch = require('micromatch'); +import * as utils from './utils/index.js'; + +import micromatch from 'micromatch'; /** * Returns an array of strings that match the given glob pattern(s). @@ -20,13 +20,13 @@ const micromatch = require('micromatch'); * @api public */ -helpers.match = function(files, patterns, locals, options) { - var opts = util.options(this, locals, options); +export function match(files, patterns, locals, options) { + var opts = utils.options(this, locals, options); if (typeof patterns === 'string') { patterns = patterns.split(/, */); } return micromatch(files, patterns, opts); -}; +} /** * Returns true if a filepath contains the given pattern. @@ -44,18 +44,18 @@ helpers.match = function(files, patterns, locals, options) { * @api public */ -helpers.isMatch = function(files, patterns, locals, options) { - var opts = util.options(this, locals, options); +export function isMatch(files, patterns, locals, options) { + var opts = utils.options(this, locals, options); return micromatch.isMatch(files, patterns, opts); -}; +} /** * Alias for micromatch helper. Deprecated in v0.9.0. */ -helpers.mm = function() { +export function mm() { console.log('the {{mm}} helper is depcrecated and will be removed'); console.log('in handlebars-helpers v1.0.0, please use the {{match}}'); console.log('helper instead.'); - return helpers.match.apply(this, arguments); -}; + return match.apply(this, arguments); +} diff --git a/lib/math.js b/lib/math.js index 77884435..b217be65 100644 --- a/lib/math.js +++ b/lib/math.js @@ -1,7 +1,6 @@ 'use strict'; -var utils = require('./utils'); -var helpers = module.exports; +import * as utils from './utils/index.js'; /** * Return the magnitude of `a`. @@ -12,12 +11,12 @@ var helpers = module.exports; * @example {{ abs 12012.1000 }} -> 12012.1 */ -helpers.abs = function(num) { +export function abs(num) { if (isNaN(num)) { throw new TypeError('expected a number'); } return Math.abs(num); -}; +} /** * Return the sum of `a` plus `b`. @@ -29,7 +28,7 @@ helpers.abs = function(num) { * @example {{ add 1 2 }} -> 3 */ -helpers.add = function(a, b) { +export function add(a, b) { if (!isNaN(a) && !isNaN(b)) { return Number(a) + Number(b); } @@ -37,7 +36,7 @@ helpers.add = function(a, b) { return a + b; } return ''; -}; +} /** * Returns the average of all numbers in the given array. @@ -53,12 +52,12 @@ helpers.add = function(a, b) { * @example {{ avg 1 2 3 4 5 }} -> 3 */ -helpers.avg = function() { +export function avg() { const args = [].concat.apply([], arguments); // remove handlebars options object args.pop(); - return helpers.sum(args) / args.length; -}; + return sum(args) / args.length; +} /** * Get the `Math.ceil()` of the given value. @@ -69,12 +68,12 @@ helpers.avg = function() { * @example {{ ceil 1.2 }} -> 2 */ -helpers.ceil = function(num) { +export function ceil(num) { if (isNaN(num)) { throw new TypeError('expected a number'); } return Math.ceil(num); -}; +} /** * Divide `a` by `b` @@ -85,7 +84,7 @@ helpers.ceil = function(num) { * @example {{ divide 10 5 }} -> 2 */ -helpers.divide = function(a, b) { +export function divide(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -93,7 +92,7 @@ helpers.divide = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) / Number(b); -}; +} /** * Get the `Math.floor()` of the given value. @@ -104,12 +103,12 @@ helpers.divide = function(a, b) { * @example {{ floor 1.2 }} -> 1 */ -helpers.floor = function(num) { +export function floor(num) { if (isNaN(num)) { throw new TypeError('expected a number'); } return Math.floor(num); -}; +} /** * Return the difference of `a` minus `b`. @@ -121,7 +120,7 @@ helpers.floor = function(num) { * @example {{ minus 10 5 }} -> 5 */ -helpers.minus = function(a, b) { +export function minus(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -129,7 +128,7 @@ helpers.minus = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) - Number(b); -}; +} /** * Get the remainder of a division operation. @@ -141,7 +140,7 @@ helpers.minus = function(a, b) { * @example {{ modulo 10 5 }} -> 0 */ -helpers.modulo = function(a, b) { +export function modulo(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -149,7 +148,7 @@ helpers.modulo = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) % Number(b); -}; +} /** * Multiply number `a` by number `b`. @@ -162,7 +161,7 @@ helpers.modulo = function(a, b) { * @example {{ multiply 10 5 }} -> 50 */ -helpers.multiply = function(a, b) { +export function multiply(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -170,7 +169,7 @@ helpers.multiply = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) * Number(b); -}; +} /** * Add `a` by `b`. @@ -181,7 +180,7 @@ helpers.multiply = function(a, b) { * @example {{ plus 10 5 }} -> 15 */ -helpers.plus = function(a, b) { +export function plus(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -189,7 +188,7 @@ helpers.plus = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) + Number(b); -}; +} /** * Generate a random number between two values @@ -201,7 +200,7 @@ helpers.plus = function(a, b) { * @example {{ random 0 20 }} -> 10 */ -helpers.random = function(min, max) { +export function random(min, max) { if (isNaN(min)) { throw new TypeError('expected minimum to be a number'); } @@ -209,7 +208,7 @@ helpers.random = function(min, max) { throw new TypeError('expected maximum to be a number'); } return utils.random(min, max); -}; +} /** * Get the remainder when `a` is divided by `b`. @@ -220,9 +219,9 @@ helpers.random = function(min, max) { * @example {{ remainder 10 6 }} -> 4 */ -helpers.remainder = function(a, b) { +export function remainder(a, b) { return a % b; -}; +} /** * Round the given number. @@ -233,12 +232,12 @@ helpers.remainder = function(a, b) { * @example {{ round 10.3 }} -> 10 */ -helpers.round = function(num) { +export function round(num) { if (isNaN(num)) { throw new TypeError('expected a number'); } return Math.round(num); -}; +} /** * Return the product of `a` minus `b`. @@ -251,7 +250,7 @@ helpers.round = function(num) { * @example {{ subtract 10 5 }} -> 5 */ -helpers.subtract = function(a, b) { +export function subtract(a, b) { if (isNaN(a)) { throw new TypeError('expected the first argument to be a number'); } @@ -259,7 +258,7 @@ helpers.subtract = function(a, b) { throw new TypeError('expected the second argument to be a number'); } return Number(a) - Number(b); -}; +} /** * Returns the sum of all numbers in the given array. @@ -274,7 +273,7 @@ helpers.subtract = function(a, b) { * @example {{ sum [1, 2, 3] }} -> 6 */ -helpers.sum = function() { +export function sum() { var args = [].concat.apply([], arguments); var len = args.length; var sum = 0; @@ -285,4 +284,4 @@ helpers.sum = function() { } } return sum; -}; +} diff --git a/lib/misc.js b/lib/misc.js index 79110038..1c56fedc 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -1,15 +1,15 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var helpers = module.exports; -const getValue = require('get-value'); -const createFrame = require('./utils/createFrame'); +import {options as _options} from './utils/index.js'; + +import getValue from 'get-value'; +import createFrame from './utils/createFrame.js'; /** * Block helper for exposing private `@` variables on the context */ -helpers.frame = function(context, options) { +export function frame(context, options) { if (typeof(context) === 'object' && context.hash) { options = context; context = options.data; @@ -23,7 +23,7 @@ helpers.frame = function(context, options) { // extend the frame with hash arguments frame.extend(options.hash); return options.fn(this, { data: frame }); -}; +} /** * Return the given value of `prop` from `this.options`. @@ -38,9 +38,9 @@ helpers.frame = function(context, options) { * @api public */ -helpers.option = function(prop, locals, options) { - return getValue(util.options(this, locals, options), prop); -}; +export function option(prop, locals, options) { + return getValue(_options(this, locals, options), prop); +} /** * Block helper that renders the block without taking any arguments. @@ -51,9 +51,9 @@ helpers.option = function(prop, locals, options) { * @api public */ -helpers.noop = function(options) { +export function noop(options) { return options.fn(this); -}; +} /** * Get the native type of the given `value` @@ -71,7 +71,7 @@ helpers.noop = function(options) { * @api public */ -helpers.typeOf = function(val) { return typeof val; }; +export function typeOf(val) { return typeof val; } /** * Block helper that builds the context for the block @@ -83,10 +83,10 @@ helpers.typeOf = function(val) { return typeof val; }; * @api public */ -helpers.withHash = function(options) { +export function withHash(options) { if (options.hash && Object.keys(options.hash).length) { return options.fn(options.hash); } else { return options.inverse(this); } -}; +} diff --git a/lib/number.js b/lib/number.js index 7948db60..23cd4671 100644 --- a/lib/number.js +++ b/lib/number.js @@ -1,9 +1,6 @@ 'use strict'; -var util = { - isUndefined: require('./utils/isUndefined') -}; -var helpers = module.exports; +import * as util from './utils/index.js'; /** * Format a number to it's equivalent in bytes. If a string is passed, @@ -22,7 +19,7 @@ var helpers = module.exports; * @example {{ bytes 1386 1 }} -> 1.4 kB */ -helpers.bytes = function(number, precision, options) { +export function bytes(number, precision, options) { if (number == null) return '0 B'; if (isNaN(number)) { @@ -49,7 +46,7 @@ helpers.bytes = function(number, precision, options) { } return number; -}; +} /** * Add commas to numbers @@ -60,9 +57,9 @@ helpers.bytes = function(number, precision, options) { * @example {{ addCommas 1000000 }} -> 1,000,000 */ -helpers.addCommas = function(num) { +export function addCommas(num) { return num.toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); -}; +} /** * Convert a string or number to a formatted phone number. @@ -74,13 +71,13 @@ helpers.addCommas = function(num) { * @example {{ phoneNumber 8005551212 }} -> (800) 555-1212 */ -helpers.phoneNumber = function(num) { +export function phoneNumber(num) { num = num.toString(); return '(' + num.substr(0, 3) + ') ' + num.substr(3, 3) + '-' + num.substr(6, 4); -}; +} /** * Abbreviate numbers to the given number of `precision`. This is for @@ -93,7 +90,7 @@ helpers.phoneNumber = function(num) { * @example {{ toAbbr 10123 2 }} -> 10.12k */ -helpers.toAbbr = function(number, precision) { +export function toAbbr(number, precision) { if (isNaN(number)) { number = 0; } @@ -117,7 +114,7 @@ helpers.toAbbr = function(number, precision) { len--; } return number; -}; +} /** * Returns a string representing the given number in exponential notation. @@ -132,7 +129,7 @@ helpers.toAbbr = function(number, precision) { * @example {{ toExponential 10123 2 }} -> 1.01e+4 */ -helpers.toExponential = function(number, digits) { +export function toExponential(number, digits) { if (isNaN(number)) { number = 0; } @@ -140,7 +137,7 @@ helpers.toExponential = function(number, digits) { digits = 0; } return Number(number).toExponential(digits); -}; +} /** * Formats the given number using fixed-point notation. @@ -156,7 +153,7 @@ helpers.toExponential = function(number, digits) { * @example {{ toFixed 1.1234 2 }} -> 1.12 */ -helpers.toFixed = function(number, digits) { +export function toFixed(number, digits) { if (isNaN(number)) { number = 0; } @@ -164,7 +161,7 @@ helpers.toFixed = function(number, digits) { digits = 0; } return Number(number).toFixed(digits); -}; +} /** * @param {Number} `number` @@ -172,9 +169,9 @@ helpers.toFixed = function(number, digits) { * @api public */ -helpers.toFloat = function(number) { +export function toFloat(number) { return parseFloat(number); -}; +} /** * @param {Number} `number` @@ -182,9 +179,9 @@ helpers.toFloat = function(number) { * @api public */ -helpers.toInt = function(number) { +export function toInt(number) { return parseInt(number, 10); -}; +} /** * Returns a string representing the `Number` object to the specified precision. @@ -200,7 +197,7 @@ helpers.toInt = function(number) { * @example {{toPrecision '1.1234' 2}} -> 1.1 */ -helpers.toPrecision = function(number, precision) { +export function toPrecision(number, precision) { if (isNaN(number)) { number = 0; } @@ -208,4 +205,4 @@ helpers.toPrecision = function(number, precision) { precision = 1; } return Number(number).toPrecision(precision); -}; +} diff --git a/lib/object.js b/lib/object.js index 3cd17757..f0a54a04 100644 --- a/lib/object.js +++ b/lib/object.js @@ -1,15 +1,18 @@ 'use strict'; var hasOwn = Object.hasOwnProperty; + +import isOptions from './utils/isOptions.js'; +import isObject from './utils/isObject.js'; var util = { - isOptions: require('./utils/isOptions'), - isObject: require('./utils/isObject') + isOptions, + isObject }; -var array = require('./array'); -var helpers = module.exports; -const getValue = require('get-value'); -const getObject = require('get-object'); -const createFrame = require('./utils/createFrame'); +import { arrayify } from './array.js'; + +import getValue from 'get-value'; +import getObject from 'get-object'; +import createFrame from './utils/createFrame.js'; /** * Extend the context with the properties of other objects. @@ -20,7 +23,7 @@ const createFrame = require('./utils/createFrame'); * @api public */ -helpers.extend = function(/*objects*/) { +export function extend(/*objects*/) { var args = [].slice.call(arguments); var opts = {}; @@ -44,7 +47,7 @@ helpers.extend = function(/*objects*/) { } return context; -}; +} /** * Block helper that iterates over the properties of @@ -57,7 +60,7 @@ helpers.extend = function(/*objects*/) { * @api public */ -helpers.forIn = function(obj, options) { +export function forIn(obj, options) { if (!util.isOptions(options)) { return obj.inverse(this); } @@ -70,7 +73,7 @@ helpers.forIn = function(obj, options) { result += options.fn(obj[key], { data: data }); } return result; -}; +} /** * Block helper that iterates over the **own** properties of @@ -83,7 +86,7 @@ helpers.forIn = function(obj, options) { * @api public */ -helpers.forOwn = function(obj, options) { +export function forOwn(obj, options) { if (!util.isOptions(options)) { return obj.inverse(this); } @@ -98,7 +101,7 @@ helpers.forOwn = function(obj, options) { } } return result; -}; +} /** * Take arguments and, if they are string or number, convert them to a dot-delineated object property path. @@ -108,7 +111,7 @@ helpers.forOwn = function(obj, options) { * @api public */ -helpers.toPath = function(/*prop*/) { +export function toPath(/*prop*/) { var prop = []; for (var i = 0; i < arguments.length; i++) { if (typeof arguments[i] === 'string' || typeof arguments[i] === 'number') { @@ -116,7 +119,7 @@ helpers.toPath = function(/*prop*/) { } } return prop.join('.'); -}; +} /** * Use property paths (`a.b.c`) to get a value or nested value from @@ -130,13 +133,13 @@ helpers.toPath = function(/*prop*/) { * @api public */ -helpers.get = function(prop, context, options) { +export function get(prop, context, options) { var val = getValue(context, prop); if (options && options.fn) { return val ? options.fn(val) : options.inverse(context); } return val; -}; +} /** * Use property paths (`a.b.c`) to get an object from @@ -151,9 +154,10 @@ helpers.get = function(prop, context, options) { * @api public */ -helpers.getObject = function(prop, context) { +const _getObject = function(prop, context) { return getObject(context, prop); }; +export { _getObject as getObject }; /** * Return true if `key` is an own, enumerable property @@ -169,9 +173,10 @@ helpers.getObject = function(prop, context) { * @api public */ -helpers.hasOwn = function(context, key) { +const _hasOwn = function(context, key) { return hasOwn.call(context, key); }; +export { _hasOwn as hasOwn }; /** * Return true if `value` is an object. @@ -185,9 +190,10 @@ helpers.hasOwn = function(context, key) { * @api public */ -helpers.isObject = function(value) { +const _isObject = function(value) { return typeof value === 'object'; }; +export { _isObject as isObject }; /** * Parses the given string using `JSON.parse`. @@ -203,9 +209,9 @@ helpers.isObject = function(value) { * @api public */ -helpers.JSONparse = function(str, options) { +export function JSONparse(str, options) { return JSON.parse(str); -}; +} /** * Stringify an object using `JSON.stringify`. @@ -220,12 +226,12 @@ helpers.JSONparse = function(str, options) { * @api public */ -helpers.JSONstringify = function(obj, indent) { +export function JSONstringify(obj, indent) { if (isNaN(indent)) { indent = 0; } return JSON.stringify(obj, null, indent); -}; +} /** * Deeply merge the properties of the given `objects` with the @@ -237,7 +243,7 @@ helpers.JSONstringify = function(obj, indent) { * @api public */ -helpers.merge = function(context/*, objects, options*/) { +export function merge(context/*, objects, options*/) { var args = [].slice.call(arguments); var opts = {}; @@ -249,14 +255,9 @@ helpers.merge = function(context/*, objects, options*/) { } return Object.assign.apply(null, args); -}; - -/** - * Alias for parseJSON. this will be - * deprecated in a future release - */ +} -helpers.parseJSON = helpers.JSONparse; +export const parseJSON = JSONparse; /** * Pick properties from the context object. @@ -269,13 +270,13 @@ helpers.parseJSON = helpers.JSONparse; * @api public */ -helpers.pick = function(props, context, options) { - var keys = array.arrayify(props); +export function pick(props, context, options) { + var keys = arrayify(props); var len = keys.length, i = -1; var result = {}; while (++i < len) { - result = helpers.extend({}, result, getObject(context, keys[i])); + result = extend({}, result, getObject(context, keys[i])); } if (options.fn) { @@ -285,11 +286,6 @@ helpers.pick = function(props, context, options) { return options.inverse(context); } return result; -}; - -/** - * Alias for JSONstringify. this will be - * deprecated in a future release - */ +} -helpers.stringify = helpers.JSONstringify; +export const stringify = JSONstringify; diff --git a/lib/path.js b/lib/path.js index 6af69c4e..019555b6 100644 --- a/lib/path.js +++ b/lib/path.js @@ -1,9 +1,8 @@ 'use strict'; -var util = require('./utils/handlebarsUtils'); -var path = require('path'); -const relative = require('relative'); -var helpers = module.exports; +import * as util from './utils/index.js'; +import path from 'path'; +import _relative from 'relative'; /** * Get the directory path segment from the given `filepath`. @@ -17,7 +16,7 @@ var helpers = module.exports; * @api public */ -helpers.absolute = function(filepath, options) { +export const absolute = function(filepath, options) { options = options || { data: {} }; var context = util.options(this, options); var ctx = Object.assign({}, options.data.root, context); @@ -37,7 +36,7 @@ helpers.absolute = function(filepath, options) { * @api public */ -helpers.dirname = function(filepath, options) { +export const dirname = function(filepath, options) { if (typeof filepath !== 'string') { throw new TypeError(util.expectedType('filepath', 'string', filepath)); } @@ -56,14 +55,14 @@ helpers.dirname = function(filepath, options) { * @api public */ -helpers.relative = function(a, b) { +export const relative = function(a, b) { if (typeof a !== 'string') { throw new TypeError(util.expectedType('first path', 'string', a)); } if (typeof b !== 'string') { throw new TypeError(util.expectedType('second path', 'string', b)); } - return relative(a, b); + return _relative(a, b); }; /** @@ -78,7 +77,7 @@ helpers.relative = function(a, b) { * @api public */ -helpers.basename = function(filepath) { +export const basename = function(filepath) { if (typeof filepath !== 'string') { throw new TypeError(util.expectedType('filepath', 'string', filepath)); } @@ -97,7 +96,7 @@ helpers.basename = function(filepath) { * @api public */ -helpers.stem = function(filepath) { +export const stem = function(filepath) { if (typeof filepath !== 'string') { throw new TypeError(util.expectedType('filepath', 'string', filepath)); } @@ -116,7 +115,7 @@ helpers.stem = function(filepath) { * @api public */ -helpers.extname = function(filepath) { +export const extname = function(filepath) { if (typeof filepath !== 'string') { throw new TypeError(util.expectedType('filepath', 'string', filepath)); } @@ -135,7 +134,7 @@ helpers.extname = function(filepath) { * @api public */ -helpers.resolve = function(filepath) { +export const resolve = function(filepath) { var args = [].slice.call(arguments); var opts = util.options(this, args.pop()); var cwd = path.resolve(opts.cwd || process.cwd()); @@ -163,7 +162,7 @@ helpers.resolve = function(filepath) { * @api public */ -helpers.segments = function(filepath, a, b) { +export const segments = function(filepath, a, b) { if (typeof filepath !== 'string') { throw new TypeError(util.expectedType('filepath', 'string', filepath)); } diff --git a/lib/regex.js b/lib/regex.js index 5cba5f6d..b2ae442b 100644 --- a/lib/regex.js +++ b/lib/regex.js @@ -1,8 +1,8 @@ 'use strict'; -var util = { options: require('./utils/options') }; -var helpers = module.exports; -const kindOf = require('kind-of'); +import * as util from './utils/index.js'; + +import kindOf from 'kind-of'; /** * Convert the given string to a regular expression. @@ -17,10 +17,10 @@ const kindOf = require('kind-of'); * @example {{toRegex 'foo'}} -> /foo/ */ -helpers.toRegex = function(str, locals, options) { +export function toRegex(str, locals, options) { var opts = util.options({}, locals, options); return new RegExp(str, opts.flags); -}; +} /** * Returns true if the given `str` matches the given regex. A regex can @@ -41,7 +41,7 @@ helpers.toRegex = function(str, locals, options) { * @example {{test 'foobar' (toRegex 'foo')}} -> true */ -helpers.test = function(str, regex) { +export function test(str, regex) { if (typeof(str) !== 'string') { return false; } @@ -49,4 +49,4 @@ helpers.test = function(str, regex) { throw new TypeError('expected a regular expression'); } return regex.test(str); -}; +} diff --git a/lib/string.js b/lib/string.js index 4351da27..4297a7cf 100644 --- a/lib/string.js +++ b/lib/string.js @@ -1,13 +1,7 @@ 'use strict'; -var util = { - isString: require('./utils/isString'), - isObject: require('./utils/isObject'), - options: require('./utils/options') -}; -var utils = require('./utils'); -var helpers = module.exports; -let lorem = require('./lorem.js'); +import * as utils from './utils/index.js'; +import loremText from './utils/lorem.js'; /** * Append the specified `suffix` to the given string. @@ -24,7 +18,7 @@ let lorem = require('./lorem.js'); * @example {{append 'index' '.html'}} -> index.html */ -helpers.append = function(str, suffix) { +export const append = function(str, suffix) { if (typeof str === 'string' && typeof suffix === 'string') { return str + suffix; } @@ -44,7 +38,7 @@ helpers.append = function(str, suffix) { * @example {{camelcase 'foo bar baz'}} -> fooBarBaz */ -helpers.camelcase = function(str) { +export const camelcase = function(str) { if (typeof(str) !== 'string') return ''; return utils.changecase(str, function(ch) { return ch.toUpperCase(); @@ -64,7 +58,7 @@ helpers.camelcase = function(str) { * @example {{capitalize 'foo bar baz'}} -> Foo bar baz */ -helpers.capitalize = function(str) { +export const capitalize = function(str) { if (typeof(str) !== 'string') return ''; return str.charAt(0).toUpperCase() + str.slice(1); }; @@ -82,11 +76,11 @@ helpers.capitalize = function(str) { * @example {{ capitalizeAll 'foo bar baz'}} -> Foo Bar Baz */ -helpers.capitalizeAll = function(str) { +export const capitalizeAll = function(str) { if (typeof(str) !== 'string') return ''; - if (util.isString(str)) { + if (utils.isString(str)) { return str.replace(/\w\S*/g, function(word) { - return helpers.capitalize(word); + return capitalize(word); }); } }; @@ -101,7 +95,7 @@ helpers.capitalizeAll = function(str) { * @example {{ center 'test' 1}} -> ' test ' */ -helpers.center = function(str, spaces) { +export const center = function(str, spaces) { if (typeof(str) !== 'string') return ''; var space = ''; var i = 0; @@ -132,7 +126,7 @@ helpers.center = function(str, spaces) { * @example {{ chop ' ABC '}} -> ABC */ -helpers.chop = function(str) { +export const chop = function(str) { if (typeof(str) !== 'string') return ''; return utils.chop(str); }; @@ -151,7 +145,7 @@ helpers.chop = function(str) { * @example {{dashcase 'a-b-c d_e'}} -> a-b-c-d-e */ -helpers.dashcase = function(str) { +export const dashcase = function(str) { if (typeof(str) !== 'string') return ''; return utils.changecase(str, function(ch) { return '-' + ch; @@ -171,7 +165,7 @@ helpers.dashcase = function(str) { * @example {{dotcase 'a-b-c d_e'}} -> a.b.c.d.e */ -helpers.dotcase = function(str) { +export const dotcase = function(str) { if (typeof(str) !== 'string') return ''; return utils.changecase(str, function(ch) { return '.' + ch; @@ -193,8 +187,8 @@ helpers.dotcase = function(str) { */ -helpers.downcase = function() { - return helpers.lowercase.apply(this, arguments); +export const downcase = function() { + return lowercase.apply(this, arguments); }; /** @@ -214,12 +208,12 @@ helpers.downcase = function() { * @example {{ellipsis 'foo bar baz' 7}} -> foo bar… */ -helpers.ellipsis = function(str, limit) { - if (util.isString(str)) { +export const ellipsis = function(str, limit) { + if (utils.isString(str)) { if (str.length <= limit) { return str; } - return helpers.truncate(str, limit) + '…'; + return truncate(str, limit) + '…'; } }; @@ -236,7 +230,7 @@ helpers.ellipsis = function(str, limit) { * @example {{hyphenate 'foo bar baz qux'}} -> foo-bar-baz-qux */ -helpers.hyphenate = function(str) { +export const hyphenate = function(str) { if (typeof(str) !== 'string') return ''; return str.split(' ').join('-'); }; @@ -254,7 +248,7 @@ helpers.hyphenate = function(str) { * @example {{isString 'foo'}} -> true */ -helpers.isString = function(value) { +export const isString = function(value) { return typeof value === 'string'; }; @@ -271,8 +265,8 @@ helpers.isString = function(value) { * @example {{lowercase 'Foo BAR baZ'}} -> foo bar baz */ -helpers.lowercase = function(str) { - if (util.isObject(str) && str.fn) { +export const lowercase = function(str) { + if (utils.isObject(str) && str.fn) { return str.fn(this).toLowerCase(); } if (typeof(str) !== 'string') return ''; @@ -294,7 +288,7 @@ helpers.lowercase = function(str) { * @example {{occurrences 'foo bar foo bar baz' 'foo'}} -> 2 */ -helpers.occurrences = function(str, substring) { +export const occurrences = function(str, substring) { if (typeof(str) !== 'string') return ''; var len = substring.length; var pos = 0; @@ -320,7 +314,7 @@ helpers.occurrences = function(str, substring) { * @example {{pascalcase 'foo bar baz'}} -> FooBarBaz */ -helpers.pascalcase = function(str) { +export const pascalcase = function(str) { if (typeof(str) !== 'string') return ''; str = utils.changecase(str, function(ch) { return ch.toUpperCase(); @@ -341,7 +335,7 @@ helpers.pascalcase = function(str) { * @example {{pathcase 'a-b-c d_e'}} -> a/b/c/d/e */ -helpers.pathcase = function(str) { +export const pathcase = function(str) { if (typeof(str) !== 'string') return ''; return utils.changecase(str, function(ch) { return '/' + ch; @@ -362,9 +356,9 @@ helpers.pathcase = function(str) { * @example {{plusify 'foo bar baz'}} -> foo+bar+baz */ -helpers.plusify = function(str, ch) { +export const plusify = function(str, ch) { if (typeof(str) !== 'string') return ''; - if (!util.isString(ch)) ch = ' '; + if (!utils.isString(ch)) ch = ' '; return str.split(ch).join('+'); }; @@ -383,7 +377,7 @@ helpers.plusify = function(str, ch) { * @example {{prepend 'bar' 'foo-'}} -> foo-bar */ -helpers.prepend = function(str, prefix) { +export const prepend = function(str, prefix) { return typeof str === 'string' && typeof prefix === 'string' ? (prefix + str) : str; @@ -406,9 +400,9 @@ helpers.prepend = function(str, prefix) { * @example {{{{raw}}}}{{foo}}{{{{/raw}}}} -> \{{foo}} */ -helpers.raw = function(options) { +export const raw = function(options) { var str = options.fn(); - var opts = util.options(this, options); + var opts = utils.options(this, options); if (opts.escape !== false) { var idx = 0; while (((idx = str.indexOf('{{', idx)) !== -1)) { @@ -435,9 +429,9 @@ helpers.raw = function(options) { * @example {{remove 'a b a b a b' 'a '}} -> b b b */ -helpers.remove = function(str, ch) { +export const remove = function(str, ch) { if (typeof(str) !== 'string') return ''; - if (!util.isString(ch)) return str; + if (!utils.isString(ch)) return str; return str.split(ch).join(''); }; @@ -455,9 +449,9 @@ helpers.remove = function(str, ch) { * @example {{removeFirst 'a b a b a b' 'a'}} -> ' b a b a b' */ -helpers.removeFirst = function(str, ch) { +export const removeFirst = function(str, ch) { if (typeof(str) !== 'string') return ''; - if (!util.isString(ch)) return str; + if (!utils.isString(ch)) return str; return str.replace(ch, ''); }; @@ -476,10 +470,10 @@ helpers.removeFirst = function(str, ch) { * @example {{replace 'a b a b a b' 'a' 'z'}} -> z b z b z b */ -helpers.replace = function(str, a, b) { +export const replace = function(str, a, b) { if (typeof(str) !== 'string') return ''; - if (!util.isString(a)) return str; - if (!util.isString(b)) b = ''; + if (!utils.isString(a)) return str; + if (!utils.isString(b)) b = ''; return str.split(a).join(b); }; @@ -498,10 +492,10 @@ helpers.replace = function(str, a, b) { * @example {{replaceFirst 'a b a b a b' 'a' 'z'}} -> z b a b a b */ -helpers.replaceFirst = function(str, a, b) { +export const replaceFirst = function(str, a, b) { if (typeof(str) !== 'string') return ''; - if (!util.isString(a)) return str; - if (!util.isString(b)) b = ''; + if (!utils.isString(a)) return str; + if (!utils.isString(b)) b = ''; return str.replace(a, b); }; @@ -518,7 +512,7 @@ helpers.replaceFirst = function(str, a, b) { * @example {{reverse 'abcde'}} -> edcba */ -helpers.reverse = require('./array').reverse; +export { reverse} from './array.js'; /** * Sentence case the given string @@ -533,7 +527,7 @@ helpers.reverse = require('./array').reverse; * @example {{sentence 'hello world. goodbye world.'}} -> Hello world. Goodbye world. */ -helpers.sentence = function(str) { +export const sentence = function(str) { if (typeof(str) !== 'string') return ''; return str.replace(/((?:\S[^\.\?\!]*)[\.\?\!]*)/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); @@ -553,7 +547,7 @@ helpers.sentence = function(str) { * @example {{snakecase 'a-b-c d_e'}} -> a_b_c_d_e */ -helpers.snakecase = function(str) { +export const snakecase = function(str) { if (typeof(str) !== 'string') return ''; return utils.changecase(str, function(ch) { return '_' + ch; @@ -573,9 +567,9 @@ helpers.snakecase = function(str) { * @example {{split 'a,b,c'}} -> ['a', 'b', 'c'] */ -helpers.split = function(str, ch) { +export const split = function(str, ch) { if (typeof(str) !== 'string') return ''; - if (!util.isString(ch)) ch = ','; + if (!utils.isString(ch)) ch = ','; return str.split(ch); }; @@ -599,10 +593,10 @@ helpers.split = function(str, ch) { * @example {{#startsWith 'Goodbye' 'Hello, world!'}}Yep{{else}}Nope{{/startsWith}} -> Nope */ -helpers.startsWith = function(prefix, str, options) { +export const startsWith = function(prefix, str, options) { var args = [].slice.call(arguments); options = args.pop(); - if (util.isString(str) && str.indexOf(prefix) === 0) { + if (utils.isString(str) && str.indexOf(prefix) === 0) { return options.fn(this); } if (typeof options.inverse === 'function') { @@ -624,7 +618,7 @@ helpers.startsWith = function(prefix, str, options) { * @example {{titleize 'this is title case' }} -> This Is Title Case */ -helpers.titleize = function(str) { +export const titleize = function(str) { if (typeof(str) !== 'string') return ''; var title = str.replace(/[- _]+/g, ' '); var words = title.split(' '); @@ -633,7 +627,7 @@ helpers.titleize = function(str) { var i = 0; while (len--) { var word = words[i++]; - res.push(exports.capitalize(word)); + res.push(capitalize(word)); } return res.join(' '); }; @@ -652,7 +646,7 @@ helpers.titleize = function(str) { * @example {{trim ' ABC ' }} -> ABC */ -helpers.trim = function(str) { +export const trim = function(str) { return typeof str === 'string' ? str.trim() : ''; }; @@ -669,8 +663,8 @@ helpers.trim = function(str) { * @example {{trimLeft ' ABC ' }} -> 'ABC ' */ -helpers.trimLeft = function(str) { - if (util.isString(str)) { +export const trimLeft = function(str) { + if (utils.isString(str)) { return str.replace(/^\s+/, ''); } }; @@ -688,8 +682,8 @@ helpers.trimLeft = function(str) { * @example {{trimRight ' ABC ' }} -> ' ABC' */ -helpers.trimRight = function(str) { - if (util.isString(str)) { +export const trimRight = function(str) { + if (utils.isString(str)) { return str.replace(/\s+$/, ''); } }; @@ -712,8 +706,8 @@ helpers.trimRight = function(str) { * @example {{truncate 'foo bar baz' 7 }} -> foo bar */ -helpers.truncate = function(str, limit, suffix) { - if (util.isString(str)) { +export const truncate = function(str, limit, suffix) { + if (utils.isString(str)) { if (typeof suffix !== 'string') { suffix = ''; } @@ -745,8 +739,8 @@ helpers.truncate = function(str, limit, suffix) { * @example {{truncateWords 'foo bar baz' 1 }} -> foo… */ -helpers.truncateWords = function(str, count, suffix) { - if (util.isString(str) && !isNaN(count)) { +export const truncateWords = function(str, count, suffix) { + if (utils.isString(str) && !isNaN(count)) { if (typeof suffix !== 'string') { suffix = '…'; } @@ -777,8 +771,8 @@ helpers.truncateWords = function(str, count, suffix) { * @example {{upcase 'aBcDef'}} -> ABCDEF */ -helpers.upcase = function() { - return helpers.uppercase.apply(this, arguments); +export const upcase = function() { + return uppercase.apply(this, arguments); }; /** @@ -800,8 +794,8 @@ helpers.upcase = function() { * @example {{uppercase 'aBcDef'}} -> ABCDEF */ -helpers.uppercase = function(str) { - if (util.isObject(str) && str.fn) { +export const uppercase = function(str) { + if (utils.isObject(str) && str.fn) { return str.fn(this).toUpperCase(); } if (typeof(str) !== 'string') return ''; @@ -823,11 +817,11 @@ helpers.uppercase = function(str) { * @example {{lorem 11}} -> Lorem ipsum */ -helpers.lorem = function(num) { +export const lorem = function(num) { // Sad Path - Not a number, or not greater than 1, or not truthy if (isNaN(num) || num < 1 || !num) { num = 11; } - return lorem.substring(0, num); + return loremText.substring(0, num); }; diff --git a/lib/url.js b/lib/url.js index 5ee2496a..50d51829 100644 --- a/lib/url.js +++ b/lib/url.js @@ -1,11 +1,8 @@ 'use strict'; -var url = require('url'); -var util = { - isString: require('./utils/isString') -}; -var querystring = require('querystring'); -var helpers = module.exports; +import { resolve, parse } from 'url'; +import * as util from './utils/index.js'; +import * as qs from 'querystring'; /** * Encodes a Uniform Resource Identifier (URI) component @@ -19,11 +16,11 @@ var helpers = module.exports; * @example {{ encodeURI 'https://myurl?Hello There' }} -> https%3A%2F%2Fmyurl%3FHello%20There */ -helpers.encodeURI = function(str) { +export function encodeURI(str) { if (util.isString(str)) { return encodeURIComponent(str); } -}; +} /** * Escape the given string by replacing characters with escape sequences. @@ -35,11 +32,11 @@ helpers.encodeURI = function(str) { * @example {{ escape 'https://myurl?Hello+There' }} -> https%3A%2F%2Fmyurl%3FHello%2BThere */ -helpers.escape = function(str) { +export function escape(str) { if (util.isString(str)) { - return querystring.escape(str); + return qs.escape(str); } -}; +} /** * Decode a Uniform Resource Identifier (URI) component. @@ -50,11 +47,11 @@ helpers.escape = function(str) { * @example {{ decodeURI 'https://myurl?Hello%20There' }} -> https://myurl?Hello There */ -helpers.decodeURI = function(str) { +export function decodeURI(str) { if (util.isString(str)) { return decodeURIComponent(str); } -}; +} /** * Take a base URL, and a href URL, and resolve them as a @@ -67,9 +64,9 @@ helpers.decodeURI = function(str) { * @example {{ urlResolve 'https://myurl' '/api/test' }} -> https://myurl/api/test */ -helpers.urlResolve = function(base, href) { - return url.resolve(base, href); -}; +export function urlResolve(base, href) { + return resolve(base, href); +} /** * Parses a `url` string into an object. @@ -80,9 +77,9 @@ helpers.urlResolve = function(base, href) { * @example {{ urlParse 'https://myurl/api/test' }} */ -helpers.urlParse = function(str) { - return url.parse(str); -}; +export function urlParse(str) { + return parse(str); +} /** * Strip the query string from the given `url`. @@ -93,11 +90,11 @@ helpers.urlParse = function(str) { * @example {{ stripQuerystring 'https://myurl/api/test?foo=bar' }} -> 'https://myurl/api/test' */ -helpers.stripQuerystring = function(str) { +export function stripQuerystring(str) { if (util.isString(str)) { return str.split('?')[0]; } -}; +} /** * Strip protocol from a `url`. Useful for displaying media that @@ -114,10 +111,10 @@ helpers.stripQuerystring = function(str) { * @example {{ stripProtocol 'https://myurl/api/test' }} -> '//myurl/api/test' */ -helpers.stripProtocol = function(str) { +export function stripProtocol(str) { if (util.isString(str)) { - var parsed = url.parse(str); + var parsed = parse(str); parsed.protocol = ''; return parsed.format(); } -}; +} diff --git a/lib/utils/createFrame.js b/lib/utils/createFrame.js index ba552b11..88c9be03 100644 --- a/lib/utils/createFrame.js +++ b/lib/utils/createFrame.js @@ -1,6 +1,6 @@ 'use strict'; -module.exports = function createFrame(data) { +export default function createFrame(data) { if (typeof(data) !== 'object') { throw new TypeError('createFrame expects data to be an object'); } diff --git a/lib/utils/falsey.js b/lib/utils/falsey.js index a0e43f85..546240f0 100644 --- a/lib/utils/falsey.js +++ b/lib/utils/falsey.js @@ -36,4 +36,4 @@ falsey.keywords = [ 'zero' ]; -module.exports = falsey; +export default falsey; diff --git a/lib/utils/fn.js b/lib/utils/fn.js index 9b4c9869..a486e1ee 100644 --- a/lib/utils/fn.js +++ b/lib/utils/fn.js @@ -1,8 +1,7 @@ 'use strict'; -const isBlock = require('./isBlock'); -const isOptions = require('./isOptions'); -const fn = require('./fn'); +import isBlock from './isBlock.js'; +import isOptions from './isOptions.js'; /** * This code was taken directly from handlebars-helpers, @@ -29,7 +28,7 @@ const fn = require('./fn'); * @api public */ -module.exports = function(val, context, options) { +const fn = function(val, context, options) { if (isOptions(val)) { return fn('', val, options); } @@ -38,3 +37,4 @@ module.exports = function(val, context, options) { } return isBlock(options) ? options.fn(context) : val; }; +export default fn; diff --git a/lib/utils/handlebarsUtils.js b/lib/utils/handlebarsUtils.js deleted file mode 100644 index d23cbe7a..00000000 --- a/lib/utils/handlebarsUtils.js +++ /dev/null @@ -1,275 +0,0 @@ -'use strict'; - -/** - * This code was taken directly from handlebars-helpers, (extracting some utils to its own file) - * https://github.com/helpers/handlebars-utils/blob/master/index.js#L398 - * - * that was taken directly from handlebars. - * https://github.com/wycats/handlebars.js/blob/b55a120e8222785db3dc00096f6afbf91b656e8a/LICENSE - * Released under the MIT License - * Copyright (C) 2011-2016 by Yehuda Katz - */ - -var util = require('util'); -var type = require('typeof-article'); -var utils = exports = module.exports; - -utils.extend = extend; -utils.escapeExpression = escapeExpression; -utils.isEmpty = isEmpty; -utils.createFrame = createFrame; -utils.blockParams = blockParams; -utils.appendContextPath = appendContextPath; - -utils.isObject = require('./isObject'); -utils.isOptions = require('./isOptions'); -utils.isUndefined = require('./isUndefined'); -utils.result = require('./result'); -utils.indexOf = require('./indexOf'); -utils.isBlock = require('./isBlock'); -utils.fn = require('./fn'); -utils.inverse = require('./inverse'); -utils.value = require('./value'); -utils.options = require('./options'); -utils.identity = require('./identity'); -utils.isString = require('./isString'); - -var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' -}; - -var badChars = /[&<>"'`=]/g; -var possible = /[&<>"'`=]/; - -function escapeChar(chr) { - return escape[chr]; -} - -function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; -} - -var toString = Object.prototype.toString; - -utils.toString = toString; -// Sourced from lodash -// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt -/* eslint-disable func-style */ -var isFunction = function isFunction(value) { - return typeof value === 'function'; -}; -// fallback for older versions of Chrome and Safari -/* istanbul ignore next */ -if (isFunction(/x/)) { - utils.isFunction = isFunction = function(value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; -} -utils.isFunction = isFunction; - -/* eslint-enable func-style */ - -/* istanbul ignore next */ -var isArray = Array.isArray || function(value) { - return value && typeof value === 'object' - ? toString.call(value) === '[object Array]' - : false; -}; - -utils.isArray = isArray; - -function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); -} - -function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; -} - -function blockParams(params, ids) { - params.path = ids; - return params; -} - -function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; -} - -// -// The code below this line was not sourced from handlebars -// -------------------------------------------------------- -// - -utils.expectedType = function(param, expected, actual) { - var exp = type.types[expected]; - var val = util.inspect(actual); - return 'expected ' + param + ' to be ' + exp + ' but received ' + type(actual) + ': ' + val; -}; - -/** - * Returns true if an `app` propery is on the context, which means - * the context was created by [assemble][], [templates][], [verb][], - * or any other library that follows this convention. - * - * ```js - * Handlebars.registerHelper('example', function(val, options) { - * var context = options.hash; - * if (utils.isApp(this)) { - * context = Object.assign({}, this.context, context); - * } - * // do stuff - * }); - * ``` - * @param {any} `value` - * @return {Boolean} - * @api public - */ - -utils.isApp = function(thisArg) { - return utils.isObject(thisArg) - && utils.isObject(thisArg.options) - && utils.isObject(thisArg.app); -}; - -/** - * Get the context to use for rendering. - * - * @param {Object} `thisArg` Optional invocation context `this` - * @return {Object} - * @api public - */ - -utils.context = function(thisArg, locals, options) { - if (utils.isOptions(thisArg)) { - return utils.context({}, locals, thisArg); - } - // ensure args are in the correct order - if (utils.isOptions(locals)) { - return utils.context(thisArg, options, locals); - } - var appContext = utils.isApp(thisArg) ? thisArg.context : {}; - options = options || {}; - - // if "options" is not handlebars options, merge it onto locals - if (!utils.isOptions(options)) { - locals = Object.assign({}, locals, options); - } - // merge handlebars root data onto locals if specified on the hash - if (utils.isOptions(options) && options.hash.root === true) { - locals = Object.assign({}, options.data.root, locals); - } - var context = Object.assign({}, appContext, locals, options.hash); - if (!utils.isApp(thisArg)) { - context = Object.assign({}, thisArg, context); - } - if (utils.isApp(thisArg) && thisArg.view && thisArg.view.data) { - context = Object.assign({}, context, thisArg.view.data); - } - return context; -}; - -/** - * Returns true if the given value is "empty". - * - * ```js - * console.log(utils.isEmpty(0)); - * //=> false - * console.log(utils.isEmpty('')); - * //=> true - * console.log(utils.isEmpty([])); - * //=> true - * console.log(utils.isEmpty({})); - * //=> true - * ``` - * @name .isEmpty - * @param {any} `value` - * @return {Boolean} - * @api public - */ - -function isEmpty(val) { - if (val === 0 || typeof val === 'boolean') { - return false; - } - if (val == null) { - return true; - } - if (utils.isObject(val)) { - val = Object.keys(val); - } - if (!val.length) { - return true; - } - return false; -} - -/** - * Cast the given `val` to an array. - * - * ```js - * console.log(utils.arrayify('')); - * //=> [] - * console.log(utils.arrayify('foo')); - * //=> ['foo'] - * console.log(utils.arrayify(['foo'])); - * //=> ['foo'] - * ``` - * @param {any} `val` - * @return {Array} - * @api public - */ - -utils.arrayify = function(val) { - return val != null ? (Array.isArray(val) ? val : [val]) : []; -}; - -/** - * Try to parse the given `string` as JSON. Fails - * gracefully and always returns an object if the value cannot be parsed. - * - * @param {String} `string` - * @return {Object} - * @api public - */ - -utils.tryParse = function(str) { - try { - return JSON.parse(str); - } catch (err) { } - return {}; -}; diff --git a/lib/utils/html.js b/lib/utils/html.js index 75758c99..a945287b 100644 --- a/lib/utils/html.js +++ b/lib/utils/html.js @@ -1,13 +1,7 @@ 'use strict'; -var util = require('./handlebarsUtils'); -var striptags = require('striptags'); - -/** - * Expose `utils` - */ - -var html = module.exports; +import { isString } from './index.js'; +import striptags from 'striptags'; /** * Remove extra newlines from HTML, respect indentation. @@ -17,9 +11,9 @@ var html = module.exports; * @api public */ -html.condense = function(str) { +export function condense(str) { return str.replace(/(\r\n|\r|\n|\u2028|\u2029) {2,}/g, '\n'); -}; +} /** * Add a single newline above code comments in HTML @@ -29,9 +23,9 @@ html.condense = function(str) { * @api public */ -html.padcomments = function(str) { +export function padcomments(str) { return str.replace(/(\s*'), '\n'); + equal(padcomments(''), '\n'); }); }); describe('parseAttributes', function() { it('should parse attributes', function() { - assert.equal(HTML.parseAttributes({a: 'b', c: 200 }), 'a="b" c="200"'); + equal(parseAttributes({a: 'b', c: 200 }), 'a="b" c="200"'); }); }); describe('toAttributes', function() { it('should convert an object hash into html attributes', function() { var hash = {disabled: true, display: 'hidden', class: 'fade'}; - assert.equal(HTML.toAttributes(hash), ' disabled display="hidden" class="fade"'); + equal(toAttributes(hash), ' disabled display="hidden" class="fade"'); }); }); }); diff --git a/test/uuid.js b/test/uuid.js index 5d845780..a0868c9e 100644 --- a/test/uuid.js +++ b/test/uuid.js @@ -1,13 +1,16 @@ 'use strict'; -require('mocha'); -const assert = require('assert'); -const uuid = require('../lib/uuid'); +import 'mocha'; +import { match } from 'assert'; +import { uuid } from '../lib/uuid.js'; describe('uuid', function() { describe('generate', function() { it('should generate a valid uuid', function() { - assert.match(uuid.uuid(), /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i); + match( + uuid(), + /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i + ); }); }); }); diff --git a/yarn.lock b/yarn.lock index d21687a6..56f39fcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,88 +2,94 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + eslint-visitor-keys "^3.4.3" -"@babel/highlight@^7.10.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" +"@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@sinonjs/commons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" - integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== - dependencies: - type-detect "4.0.8" +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - type-detect "4.0.8" + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" -"@sinonjs/fake-timers@^11.2.2": - version "11.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" - integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@sinonjs/commons" "^3.0.0" + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -"@sinonjs/samsam@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" - integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@sinonjs/commons" "^2.0.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" -"@sinonjs/text-encoding@^0.7.2": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" - integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -93,16 +99,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" - integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -238,11 +234,6 @@ ansi-colors@^1.0.1, ansi-colors@^1.1.0: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -333,6 +324,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-reset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-reset/-/ansi-reset-0.1.1.tgz#e7e71292c3c7ddcd4d62ef4a6c7c05980911c3b7" @@ -486,7 +482,7 @@ arr-filter@^1.1.0, arr-filter@^1.1.1: dependencies: make-iterator "^1.0.0" -arr-flatten@^1.0.0, arr-flatten@^1.0.1, arr-flatten@^1.0.3, arr-flatten@^1.1.0: +arr-flatten@^1.0.0, arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -564,15 +560,6 @@ array-slice@^1.0.0: resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== -array-sort@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-0.1.4.tgz#662855eaeb671b4188df4451b2f24a0753992b23" - integrity sha512-BNcM+RXxndPxiZ2rd76k6nyQLRZr2/B/sdi8pQ+Joafr5AH279L40dfokSUTp8O+AaqYjXWhblBWa2st2nc4fQ== - dependencies: - default-compare "^1.0.0" - get-value "^2.0.6" - kind-of "^5.0.2" - array-sort@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-sort/-/array-sort-1.0.0.tgz#e4c05356453f56f53512a7d1d6123f2c54c0a88a" @@ -642,11 +629,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-array-reduce@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/async-array-reduce/-/async-array-reduce-0.1.0.tgz#c74b88651d5c7f46ce5203d150c3cc7eedca57f2" @@ -697,14 +679,6 @@ async-helpers@^0.2.2: dependencies: async "^0.9.0" -async-helpers@^0.3.9: - version "0.3.17" - resolved "https://registry.yarnpkg.com/async-helpers/-/async-helpers-0.3.17.tgz#3d91af1ff853d62e9809b0f31c4bdac79baa6ba4" - integrity sha512-LfgCyvmK6ZiC7pyqOgli2zfkWL4HYbEb+HXvGgdmqVBgsOOtQz5rSF8Ii/H/1cNNtrfj1KsdZE/lUMeIY3Qcwg== - dependencies: - co "^4.6.0" - kind-of "^6.0.0" - async-listener@^0.6.0: version "0.6.10" resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" @@ -814,29 +788,6 @@ base-data@^0.6.0: set-value "^2.0.0" union-value "^1.0.0" -base-engines@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/base-engines/-/base-engines-0.2.1.tgz#697800ca8ab888a33789738dbfaccb818a2a5a7b" - integrity sha1-aXgAyoq4iKM3iXONv6zLgYoqWns= - dependencies: - debug "^2.2.0" - define-property "^0.2.5" - engine-cache "^0.19.0" - is-valid-app "^0.1.2" - lazy-cache "^2.0.1" - -base-helpers@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/base-helpers/-/base-helpers-0.2.0.tgz#75a9494bb8c059ff3d7943829cf755047bfe10d7" - integrity sha1-dalJS7jAWf89eUOCnPdVBHv+ENc= - dependencies: - debug "^2.6.0" - define-property "^0.2.5" - is-valid-app "^0.2.1" - isobject "^3.0.0" - lazy-cache "^2.0.2" - load-helpers "^0.3.1" - base-loader@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/base-loader/-/base-loader-0.1.0.tgz#d9237e506582bb5e475db7536580741d3c7e537c" @@ -845,40 +796,6 @@ base-loader@^0.1.0: map-files "^0.7.4" relative "^3.0.0" -base-option@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/base-option/-/base-option-0.8.4.tgz#11417fa9244f227a4d537b4d291723462787d5c7" - integrity sha1-EUF/qSRPInpNU3tNKRcjRieH1cc= - dependencies: - define-property "^0.2.5" - get-value "^2.0.6" - is-valid-app "^0.2.0" - isobject "^2.1.0" - lazy-cache "^2.0.1" - mixin-deep "^1.1.3" - option-cache "^3.4.0" - set-value "^0.3.3" - -base-plugins@^0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/base-plugins/-/base-plugins-0.4.13.tgz#91df178dc37f86842dea286d79e48fb86b5aac3d" - integrity sha1-kd8XjcN/hoQt6ihteeSPuGtarD0= - dependencies: - define-property "^0.2.5" - is-registered "^0.1.5" - isobject "^2.1.0" - -base-routes@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/base-routes/-/base-routes-0.2.2.tgz#0a614d172d49045d8c9387713f860df3c405341e" - integrity sha1-CmFNFy1JBF2Mk4dxP4YN88QFNB4= - dependencies: - debug "^2.2.0" - en-route "^0.7.5" - is-valid-app "^0.2.0" - lazy-cache "^2.0.1" - template-error "^0.1.2" - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1077,7 +994,7 @@ chalk@^1.0.0, chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1: +chalk@^2.0.1, chalk@^2.3.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1245,7 +1162,7 @@ clone@^1.0.0, clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.0, clone@^2.1.1: +clone@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= @@ -1259,11 +1176,6 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - code-context@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/code-context/-/code-context-0.5.3.tgz#e368c7bd247d3ac71100d91b5fd02e4e66fa9022" @@ -1478,9 +1390,9 @@ core-util-is@~1.0.0: integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -1598,14 +1510,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.3.5: +debug@^4.3.1, debug@^4.3.2, debug@^4.3.5: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -1634,13 +1539,6 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -deep-bind@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/deep-bind/-/deep-bind-0.3.0.tgz#95c31dd84a1cd1b381119a2c42edb90db485bc33" - integrity sha1-lcMd2Eoc0bOBEZosQu25DbSFvDM= - dependencies: - mixin-deep "^1.1.3" - deep-equal@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -1755,11 +1653,6 @@ diff@^2.0.2: resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" integrity sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k= -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - diff@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" @@ -1826,18 +1719,6 @@ en-route@^0.5.0: path-to-regexp "^1.0.3" utils-merge "^1.0.0" -en-route@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/en-route/-/en-route-0.7.5.tgz#e8230e73836c5e95c6757e0442d3c113124bdd98" - integrity sha1-6CMOc4NsXpXGdX4EQtPBExJL3Zg= - dependencies: - arr-flatten "^1.0.1" - debug "^2.2.0" - extend-shallow "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - path-to-regexp "^1.2.1" - end-of-stream@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" @@ -1886,18 +1767,6 @@ engine-cache@^0.12.1: extend-shallow "^1.1.4" helper-cache "^0.7.1" -engine-cache@^0.19.0: - version "0.19.4" - resolved "https://registry.yarnpkg.com/engine-cache/-/engine-cache-0.19.4.tgz#8224966fbdf6a65e780ec79df87b6b2cb82395b2" - integrity sha1-giSWb732pl54Dsed+HtrLLgjlbI= - dependencies: - async-helpers "^0.3.9" - extend-shallow "^2.0.1" - helper-cache "^0.7.2" - isobject "^3.0.0" - lazy-cache "^2.0.2" - mixin-deep "^1.1.3" - engine-handlebars@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/engine-handlebars/-/engine-handlebars-0.8.2.tgz#aa709d86949d35331a15d650023d9cbe4215a9f9" @@ -1923,7 +1792,7 @@ engine-utils@^0.1.1: resolved "https://registry.yarnpkg.com/engine-utils/-/engine-utils-0.1.1.tgz#addf4708dd85a05a3217a97797eab8a013c4f80e" integrity sha1-rd9HCN2FoFoyF6l3l+q4oBPE+A4= -engine@^0.1.10, engine@^0.1.11, engine@^0.1.12, engine@^0.1.5: +engine@^0.1.10, engine@^0.1.11, engine@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/engine/-/engine-0.1.12.tgz#f87e8c90bb80cd3f58597ac569593ee46da2742d" integrity sha1-+H6MkLuAzT9YWXrFaVk+5G2idC0= @@ -1936,13 +1805,6 @@ engine@^0.1.10, engine@^0.1.11, engine@^0.1.12, engine@^0.1.5: object.omit "^2.0.0" set-value "^0.2.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2006,94 +1868,81 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + estraverse "^5.2.0" -eslint@^7.26.0: - version "7.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" - integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" - ajv "^6.10.0" +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.57.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -2104,11 +1953,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" @@ -2338,6 +2182,13 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -2500,11 +2351,12 @@ flagged-respawn@^1.0.0: integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" flat@^5.0.2: @@ -2512,10 +2364,10 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== flush-write-stream@^1.0.2: version "1.1.1" @@ -2613,11 +2465,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - gaze@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" @@ -2738,14 +2585,6 @@ get-value@^3.0.0, get-value@^3.0.1: dependencies: isobject "^3.0.1" -get-view@^0.1.1, get-view@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/get-view/-/get-view-0.1.3.tgz#3660ac058ba13df9749cabcaa6bcb96d41aa0ea0" - integrity sha1-NmCsBYuhPfl0nKvKpry5bUGqDqA= - dependencies: - isobject "^3.0.0" - match-file "^0.2.1" - getobject@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" @@ -2870,7 +2709,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3048,10 +2894,10 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^13.6.0, globals@^13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -3098,6 +2944,11 @@ graceful-fs@~1.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" integrity sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q= +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + gray-matter@^2.0.2, gray-matter@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-2.1.1.tgz#3042d9adec2a1ded6a7707a9ed2380f8a17a430e" @@ -3119,18 +2970,6 @@ gray-matter@^3.0.2: kind-of "^5.0.2" strip-bom-string "^1.0.0" -group-array@^0.3.1: - version "0.3.4" - resolved "https://registry.yarnpkg.com/group-array/-/group-array-0.3.4.tgz#7ce02db67169ef2db472f1323c255ea5661b3748" - integrity sha512-YAmNsgsi1uQ7Ai3T4FFkMoskqbLEUPRajAmrn8FclwZQQnV98NLrNWjQ3n2+i1pANxdO3n6wsNEkKq5XrYy0Ow== - dependencies: - arr-flatten "^1.0.1" - for-own "^0.1.4" - get-value "^2.0.6" - kind-of "^3.1.0" - split-string "^1.0.1" - union-value "^1.0.1" - gulp-cli@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" @@ -3401,7 +3240,7 @@ helper-apidocs@^0.5.1: relative "^3.0.2" template-bind-helpers "^0.2.0" -helper-cache@^0.7.0, helper-cache@^0.7.1, helper-cache@^0.7.2: +helper-cache@^0.7.0, helper-cache@^0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/helper-cache/-/helper-cache-0.7.2.tgz#024562c4b4b8b2ab2ab531d00be16ec496518b90" integrity sha1-AkVixLS4sqsqtTHQC+FuxJZRi5A= @@ -3587,12 +3426,12 @@ html-tag@^2.0.0: is-self-closing "^1.0.1" kind-of "^6.0.0" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3605,7 +3444,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -inflection@^1.12.0, inflection@^1.7.0: +inflection@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.1.tgz#c5cadd80888a90cf84c2e96e340d7edc85d5f0cb" integrity sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA== @@ -3683,7 +3522,7 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-arguments@^1.0.2, is-arguments@^1.0.4: +is-arguments@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== @@ -3842,6 +3681,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-match@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/is-match/-/is-match-0.4.1.tgz#fb5f6c6709a1543b7c7efa7d9530e5b776f61f83" @@ -3891,6 +3737,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -4003,16 +3854,6 @@ is-utf8@^0.2.0, is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-valid-app@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-valid-app/-/is-valid-app-0.1.2.tgz#2f67cbb3baf64d659c70d043fc91139b5a8b9590" - integrity sha1-L2fLs7r2TWWccNBD/JETm1qLlZA= - dependencies: - debug "^2.2.0" - is-registered "^0.1.5" - is-valid-instance "^0.1.0" - lazy-cache "^2.0.1" - is-valid-app@^0.2.0, is-valid-app@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-valid-app/-/is-valid-app-0.2.1.tgz#65cf195bbd71bd776cb161991c684248d65dff89" @@ -4043,14 +3884,6 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= -is-valid-instance@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-valid-instance/-/is-valid-instance-0.1.0.tgz#7ad5c6a3886dfdf7d9cc78049ceff2171a9907b3" - integrity sha1-etXGo4ht/ffZzHgEnO/yFxqZB7M= - dependencies: - isobject "^2.1.0" - pascalcase "^0.1.1" - is-valid-instance@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-valid-instance/-/is-valid-instance-0.2.0.tgz#e1a9ff1106b8cbae0007ea6a20f89d546a2a5a0f" @@ -4144,17 +3977,12 @@ js-comments@^0.5.2, js-comments@^0.5.4: relative "^3.0.0" write "^0.2.0" -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - js-yaml-lite@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/js-yaml-lite/-/js-yaml-lite-0.1.1.tgz#9a813e305de40789c1a64a462ff8c145ddef737c" integrity sha1-moE+MF3kB4nBpkpGL/jBRd3vc3w= -js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.8.1: +js-yaml@^3.10.0, js-yaml@^3.8.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -4169,16 +3997,16 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -4189,10 +4017,12 @@ just-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.1.0.tgz#2f81a3ad4121a76bc7cb45dbf704c0d76a8e5ddf" integrity sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ== -just-extend@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" - integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" kind-of@^0.1.0, kind-of@^0.1.2: version "0.1.2" @@ -4211,7 +4041,7 @@ kind-of@^2.0.0, kind-of@^2.0.1: dependencies: is-buffer "^1.0.2" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.0.4, kind-of@^3.1.0, kind-of@^3.2.0, kind-of@^3.2.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.0.4, kind-of@^3.1.0, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= @@ -4243,16 +4073,6 @@ last-run@^1.1.0: default-resolution "^2.0.0" es6-weak-map "^2.0.1" -layouts@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/layouts/-/layouts-0.12.1.tgz#6b99b3f1aa53e5e78c90ec75d4f491a6e0f57043" - integrity sha1-a5mz8apT5eeMkOx11PSRpuD1cEM= - dependencies: - delimiter-regex "^1.3.1" - "falsey" "^0.3.0" - get-view "^0.1.1" - lazy-cache "^2.0.1" - layouts@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/layouts/-/layouts-0.9.0.tgz#29ced985f16a0131581ea10ddff1aa019453ae09" @@ -4379,18 +4199,6 @@ list-item@^1.1.1: is-number "^2.1.0" repeat-string "^1.5.2" -load-helpers@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/load-helpers/-/load-helpers-0.3.1.tgz#99a8ba07362901827c8e62c95b0b0b1fe9830549" - integrity sha1-mai6BzYpAYJ8jmLJWwsLH+mDBUk= - dependencies: - component-emitter "^1.2.1" - extend-shallow "^2.0.1" - is-valid-glob "^0.3.0" - lazy-cache "^2.0.1" - matched "^0.4.3" - resolve-dir "^0.1.0" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4563,11 +4371,6 @@ lodash.clonedeep@3.0.1: lodash._baseclone "^3.0.0" lodash._bindcallback "^3.0.0" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -4575,11 +4378,6 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -4647,11 +4445,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash@^3.10.1, lodash@^3.5.0, lodash@^3.6.0, lodash@^3.7.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -4777,13 +4570,6 @@ lru-cache@2: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - make-iterator@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-0.1.1.tgz#873d27b8198a465a81483b6f5d16da4e863ecf5b" @@ -4927,15 +4713,6 @@ markdown-utils@^0.7.0, markdown-utils@^0.7.1, markdown-utils@^0.7.3: list-item "^1.1.1" to-gfm-code-block "^0.1.1" -match-file@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/match-file/-/match-file-0.2.2.tgz#26e6bcf1b390a661f6126faf8ac501e33eccfae9" - integrity sha1-Jua88bOQpmH2Em+visUB4z7M+uk= - dependencies: - is-glob "^3.1.0" - isobject "^3.0.0" - micromatch "^2.3.11" - match-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/match-file/-/match-file-1.0.0.tgz#3496169751607b22f91a0153f879ce6deae9a968" @@ -4955,7 +4732,7 @@ matchdep@^2.0.0: resolve "^1.4.0" stack-trace "0.0.10" -matched@^0.4.1, matched@^0.4.3, matched@^0.4.4: +matched@^0.4.1, matched@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/matched/-/matched-0.4.4.tgz#56d7b7eb18033f0cf9bc52eb2090fac7dc1e89fa" integrity sha1-Vte36xgDPwz5vFLrIJD6x9weifo= @@ -5012,7 +4789,7 @@ merge-value@^1.0.0: mixin-deep "^1.2.0" set-value "^2.0.0" -micromatch@^2.1.0, micromatch@^2.1.5, micromatch@^2.2.0, micromatch@^2.3.11, micromatch@^2.3.7, micromatch@^2.3.8: +micromatch@^2.1.0, micromatch@^2.1.5, micromatch@^2.2.0, micromatch@^2.3.7, micromatch@^2.3.8: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= @@ -5113,6 +4890,13 @@ minimatch@^2.0.1: dependencies: brace-expansion "^1.0.0" +minimatch@^3.0.5, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -5204,11 +4988,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -5280,17 +5059,6 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -nise@^5.1.5: - version "5.1.7" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.7.tgz#03ca96539efb306612eb60a8c5d6beeb208e27e5" - integrity sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers" "^11.2.2" - "@sinonjs/text-encoding" "^0.7.2" - just-extend "^6.2.0" - path-to-regexp "^6.2.1" - no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" @@ -5541,32 +5309,17 @@ option-cache@^1.3.0, option-cache@^1.4.0: set-value "^0.2.0" to-flags "^0.1.0" -option-cache@^3.4.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/option-cache/-/option-cache-3.5.0.tgz#cb765155ba2a861c1109ff26e2a20eaa06612b2b" - integrity sha1-y3ZRVboqhhwRCf8m4qIOqgZhKys= - dependencies: - arr-flatten "^1.0.3" - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^0.3.1" - kind-of "^3.2.2" - lazy-cache "^2.0.2" - set-value "^0.4.3" - to-object-path "^0.3.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" ora@^2.1.0: version "2.1.0" @@ -5632,11 +5385,6 @@ pad-right@^0.2.2: dependencies: repeat-string "^1.5.2" -paginationator@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/paginationator/-/paginationator-0.1.4.tgz#84786dd3850aae1f11bbb911b0c1e0851b538106" - integrity sha1-hHht04UKrh8Ru7kRsMHghRtTgQY= - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5843,18 +5591,13 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" -path-to-regexp@^1.0.3, path-to-regexp@^1.2.1: +path-to-regexp@^1.0.3: version "1.8.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== dependencies: isarray "0.0.1" -path-to-regexp@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" - integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -5980,11 +5723,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - project-name@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/project-name/-/project-name-0.2.6.tgz#3e4f781fe1ee94b0786a9bae53506376c379af69" @@ -6016,6 +5754,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -6187,11 +5930,6 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - relative-dest@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/relative-dest/-/relative-dest-0.1.0.tgz#ba055b4c2a021f71de92a582eb766dd7b3b0c618" @@ -6300,11 +6038,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -6385,17 +6118,10 @@ rethrow@^0.1.0: resolved "https://registry.yarnpkg.com/rethrow/-/rethrow-0.1.0.tgz#7364b1ef6862696882594a88b66d5af8cfaf5e58" integrity sha1-c2Sx72hiaWiCWUqItm1a+M+vXlg= -rethrow@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/rethrow/-/rethrow-0.2.3.tgz#c5528f190e89ec7535889452a1be68996b5f6616" - integrity sha1-xVKPGQ6J7HU1iJRSob5omWtfZhY= - dependencies: - ansi-bgred "^0.1.1" - ansi-red "^0.1.1" - ansi-yellow "^0.1.1" - extend-shallow "^1.1.4" - lazy-cache "^0.2.3" - right-align "^0.1.3" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== right-align@^0.1.3: version "0.1.3" @@ -6427,6 +6153,13 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -6476,13 +6209,6 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" @@ -6534,15 +6260,6 @@ set-value@^0.2.0: isobject "^1.0.0" noncharacters "^1.1.0" -set-value@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.3.3.tgz#b81223681638a1088fd88a435b8a9d32dae8d9ba" - integrity sha1-uBIjaBY4oQiP2IpDW4qdMtro2bo= - dependencies: - extend-shallow "^2.0.1" - isobject "^2.0.0" - to-object-path "^0.2.0" - set-value@^0.4.0, set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -6642,27 +6359,6 @@ simple-get@^2.5.1: once "^1.3.1" simple-concat "^1.0.0" -sinon@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-17.0.1.tgz#26b8ef719261bf8df43f925924cccc96748e407a" - integrity sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g== - dependencies: - "@sinonjs/commons" "^3.0.0" - "@sinonjs/fake-timers" "^11.2.2" - "@sinonjs/samsam" "^8.0.0" - diff "^5.1.0" - nise "^5.1.5" - supports-color "^7.2.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6765,13 +6461,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== -split-string@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-1.0.1.tgz#bcbab3f4152acee3a0d6ab2479c0d2879c3db3ce" - integrity sha1-vLqz9BUqzuOg1qskecDSh5w9s84= - dependencies: - extend-shallow "^2.0.1" - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -6910,6 +6599,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" @@ -6942,7 +6638,7 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -6969,7 +6665,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -6991,18 +6687,6 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - template-bind-helpers@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/template-bind-helpers/-/template-bind-helpers-0.1.2.tgz#dcb7376db2681c43dd74bc3a73f522400e1b727e" @@ -7015,16 +6699,6 @@ template-bind-helpers@^0.2.0: dependencies: isobject "^2.0.0" -template-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/template-error/-/template-error-0.1.2.tgz#18c9f600d90f2f3dfba0833e37f7cb6f413542d4" - integrity sha1-GMn2ANkPLz37oIM+N/fLb0E1QtQ= - dependencies: - engine "^0.1.5" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - rethrow "^0.2.3" - template-helper-apidocs@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/template-helper-apidocs/-/template-helper-apidocs-0.4.4.tgz#8f558ff973b9496bc89feefa124b43e5aa4b7448" @@ -7167,49 +6841,10 @@ template@^0.14.3: relative "^3.0.0" template-utils "^0.6.2" -templates@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/templates/-/templates-1.2.9.tgz#d8b0de71d69331af755cb09533b4ecc2da649801" - integrity sha1-2LDecdaTMa91XLCVM7TswtpkmAE= - dependencies: - array-sort "^0.1.2" - async-each "^1.0.1" - base "^0.11.1" - base-data "^0.6.0" - base-engines "^0.2.0" - base-helpers "^0.2.0" - base-option "^0.8.4" - base-plugins "^0.4.13" - base-routes "^0.2.2" - debug "^2.6.0" - deep-bind "^0.3.0" - define-property "^0.2.5" - engine-base "^0.1.2" - export-files "^2.1.1" - extend-shallow "^2.0.1" - "falsey" "^0.3.0" - get-value "^2.0.6" - get-view "^0.1.3" - group-array "^0.3.1" - has-glob "^1.0.0" - has-value "^0.3.1" - inflection "^1.12.0" - is-valid-app "^0.2.1" - layouts "^0.12.1" - lazy-cache "^2.0.2" - match-file "^0.2.1" - mixin-deep "^1.1.3" - paginationator "^0.1.4" - pascalcase "^0.1.1" - set-value "^0.4.0" - template-error "^0.1.2" - vinyl-item "^1.0.0" - vinyl-view "^2.0.0" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== through2-filter@^3.0.0: version "3.0.0" @@ -7297,14 +6932,6 @@ to-gfm-code-block@^0.1.1: resolved "https://registry.yarnpkg.com/to-gfm-code-block/-/to-gfm-code-block-0.1.1.tgz#25d045a5fae553189e9637b590900da732d8aa82" integrity sha1-JdBFpfrlUxielje1kJANpzLYqoI= -to-object-path@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.2.0.tgz#1634e1b52a88ba00e3949619fc0081dc9a3b07ca" - integrity sha1-FjThtSqIugDjlJYZ/ACB3Jo7B8o= - dependencies: - arr-flatten "^1.0.1" - is-arguments "^1.0.2" - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -7384,11 +7011,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -7467,7 +7089,7 @@ union-value@^0.2.3: is-extendable "^0.1.1" set-value "^0.4.3" -union-value@^1.0.0, union-value@^1.0.1: +union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== @@ -7592,11 +7214,6 @@ uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8flags@^2.0.10: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -7882,22 +7499,6 @@ vinyl-fs@^3.0.0: vinyl "^2.0.0" vinyl-sourcemap "^1.1.0" -vinyl-item@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vinyl-item/-/vinyl-item-1.0.0.tgz#e4188fab795154de9e74588eaad3df4ba5151692" - integrity sha1-5BiPq3lRVN6edFiOqtPfS6UVFpI= - dependencies: - base "^0.11.1" - base-option "^0.8.4" - base-plugins "^0.4.13" - clone "^2.1.0" - clone-stats "^1.0.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - isobject "^3.0.0" - lazy-cache "^2.0.2" - vinyl "^2.0.1" - vinyl-sourcemap@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" @@ -7911,19 +7512,6 @@ vinyl-sourcemap@^1.1.0: remove-bom-buffer "^3.0.0" vinyl "^2.0.0" -vinyl-view@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/vinyl-view/-/vinyl-view-2.0.1.tgz#46a4d99fa8688bf37912868f912665a15b66816a" - integrity sha1-RqTZn6hoi/N5EoaPkSZloVtmgWo= - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - engine-base "^0.1.2" - extend-shallow "^2.0.1" - isobject "^3.0.0" - lazy-cache "^2.0.2" - vinyl-item "^1.0.0" - vinyl@^0.4.0, vinyl@^0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" @@ -7989,6 +7577,11 @@ word-wrap@^1.1.0, word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -8050,11 +7643,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"