From 065426c90af4ae102dc66f7f801478deec368be5 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 4 Jun 2020 05:41:27 -0700 Subject: [PATCH] tools: update remark-preset-lint-node from 1.15.0 to 1.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/33727 Reviewed-By: Michaël Zasso Reviewed-By: Richard Lau --- tools/lint-md.js | 11843 +++------------- .../node-lint-md-cli-rollup/package-lock.json | 1125 +- tools/node-lint-md-cli-rollup/package.json | 2 +- 3 files changed, 2041 insertions(+), 10929 deletions(-) diff --git a/tools/lint-md.js b/tools/lint-md.js index 5335fafb1e8f6f..f8e54d6d2f3fce 100644 --- a/tools/lint-md.js +++ b/tools/lint-md.js @@ -16744,9 +16744,9 @@ var colorName$1 = { "aliceblue": [240, 248, 255], "antiquewhite": [250, 235, 215], "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], "bisque": [255, 228, 196], "black": [0, 0, 0], "blanchedalmond": [255, 235, 205], @@ -16885,9 +16885,9 @@ var colorName$1 = { "turquoise": [64, 224, 208], "violet": [238, 130, 238], "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], "yellowgreen": [154, 205, 50] }; @@ -43488,7 +43488,7 @@ const dependencies$1 = { "markdown-extensions": "^1.1.1", remark: "^12.0.0", "remark-lint": "^7.0.0", - "remark-preset-lint-node": "^1.15.0", + "remark-preset-lint-node": "^1.15.1", "unified-args": "^8.0.0" }; const main = "dist/index.js"; @@ -44172,1535 +44172,958 @@ function lintMessageControl() { return remarkMessageControl({name: 'lint', source: 'remark-lint'}) } -var vfileLocation$2 = factory$8; +/** + * An Array.prototype.slice.call(arguments) alternative + * + * @param {Object} args something with a length + * @param {Number} slice + * @param {Number} sliceEnd + * @api public + */ + +var sliced = function (args, slice, sliceEnd) { + var ret = []; + var len = args.length; + + if (0 === len) return ret; -function factory$8(file) { - var contents = indices$2(String(file)); + var start = slice < 0 + ? Math.max(0, slice + len) + : slice || 0; - return { - toPosition: offsetToPositionFactory$2(contents), - toOffset: positionToOffsetFactory$2(contents) + if (sliceEnd !== undefined) { + len = sliceEnd < 0 + ? sliceEnd + len + : sliceEnd; } -} -// Factory to get the line and column-based `position` for `offset` in the bound -// indices. -function offsetToPositionFactory$2(indices) { - return offsetToPosition + while (len-- > start) { + ret[len - start] = args[len]; + } - // Get the line and column-based `position` for `offset` in the bound indices. - function offsetToPosition(offset) { - var index = -1; - var length = indices.length; + return ret; +}; - if (offset < 0) { - return {} +/** + * slice() reference. + */ + +var slice$4 = Array.prototype.slice; + +/** + * Expose `co`. + */ + +var co_1 = co; + +/** + * Wrap the given generator `fn` and + * return a thunk. + * + * @param {Function} fn + * @return {Function} + * @api public + */ + +function co(fn) { + var isGenFun = isGeneratorFunction(fn); + + return function (done) { + var ctx = this; + + // in toThunk() below we invoke co() + // with a generator, so optimize for + // this case + var gen = fn; + + // we only need to parse the arguments + // if gen is a generator function. + if (isGenFun) { + var args = slice$4.call(arguments), len = args.length; + var hasCallback = len && 'function' == typeof args[len - 1]; + done = hasCallback ? args.pop() : error; + gen = fn.apply(this, args); + } else { + done = done || error; } - while (++index < length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } + next(); + + // #92 + // wrap the callback in a setImmediate + // so that any of its errors aren't caught by `co` + function exit(err, res) { + setImmediate(function(){ + done.call(ctx, err, res); + }); } - return {} - } -} + function next(err, res) { + var ret; -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$2(indices) { - return positionToOffset + // multiple args + if (arguments.length > 2) res = slice$4.call(arguments, 1); - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; + // error + if (err) { + try { + ret = gen.throw(err); + } catch (e) { + return exit(e); + } + } - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 - } + // ok + if (!err) { + try { + ret = gen.next(res); + } catch (e) { + return exit(e); + } + } - return -1 - } -} + // done + if (ret.done) return exit(null, ret.value); -// Get indices of line-breaks in `value`. -function indices$2(value) { - var result = []; - var index = value.indexOf('\n'); + // normalize + ret.value = toThunk(ret.value, ctx); - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); + // run + if ('function' == typeof ret.value) { + var called = false; + try { + ret.value.call(ctx, function(){ + if (called) return; + called = true; + next.apply(ctx, arguments); + }); + } catch (e) { + setImmediate(function(){ + if (called) return; + called = true; + next(e); + }); + } + return; + } + + // invalid + next(new TypeError('You may only yield a function, promise, generator, array, or object, ' + + 'but the following was passed: "' + String(ret.value) + '"')); + } } +} - result.push(value.length + 1); +/** + * Convert `obj` into a normalized thunk. + * + * @param {Mixed} obj + * @param {Mixed} ctx + * @return {Function} + * @api private + */ - return result -} +function toThunk(obj, ctx) { -var convert_1$2 = convert$5; + if (isGeneratorFunction(obj)) { + return co(obj.call(ctx)); + } -function convert$5(test) { - if (typeof test === 'string') { - return typeFactory$2(test) + if (isGenerator(obj)) { + return co(obj); } - if (test === null || test === undefined) { - return ok$3 + if (isPromise(obj)) { + return promiseToThunk(obj); } - if (typeof test === 'object') { - return ('length' in test ? anyFactory$2 : matchesFactory$2)(test) + if ('function' == typeof obj) { + return obj; } - if (typeof test === 'function') { - return test + if (isObject$3(obj) || Array.isArray(obj)) { + return objectToThunk.call(ctx, obj); } - throw new Error('Expected function, string, or object as test') + return obj; } -function convertAll$2(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$5(tests[index]); - } +/** + * Convert an object of yieldables to a thunk. + * + * @param {Object} obj + * @return {Function} + * @api private + */ - return results -} +function objectToThunk(obj){ + var ctx = this; + var isArray = Array.isArray(obj); -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$2(test) { - return matches + return function(done){ + var keys = Object.keys(obj); + var pending = keys.length; + var results = isArray + ? new Array(pending) // predefine the array length + : new obj.constructor(); + var finished; - function matches(node) { - var key; + if (!pending) { + setImmediate(function(){ + done(null, results); + }); + return; + } - for (key in test) { - if (node[key] !== test[key]) { - return false + // prepopulate object keys to preserve key ordering + if (!isArray) { + for (var i = 0; i < pending; i++) { + results[keys[i]] = undefined; } } - return true - } -} + for (var i = 0; i < keys.length; i++) { + run(obj[keys[i]], keys[i]); + } -function anyFactory$2(tests) { - var checks = convertAll$2(tests); - var length = checks.length; + function run(fn, key) { + if (finished) return; + try { + fn = toThunk(fn, ctx); - return matches + if ('function' != typeof fn) { + results[key] = fn; + return --pending || done(null, results); + } - function matches() { - var index = -1; + fn.call(ctx, function(err, res){ + if (finished) return; - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true + if (err) { + finished = true; + return done(err); + } + + results[key] = res; + --pending || done(null, results); + }); + } catch (err) { + finished = true; + done(err); } } - - return false } } -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$2(test) { - return type +/** + * Convert `promise` to a thunk. + * + * @param {Object} promise + * @return {Function} + * @api private + */ - function type(node) { - return Boolean(node && node.type === test) +function promiseToThunk(promise) { + return function(fn){ + promise.then(function(res) { + fn(null, res); + }, fn); } } -// Utility to return true. -function ok$3() { - return true +/** + * Check if `obj` is a promise. + * + * @param {Object} obj + * @return {Boolean} + * @api private + */ + +function isPromise(obj) { + return obj && 'function' == typeof obj.then; } -var unistUtilVisitParents$2 = visitParents$2; +/** + * Check if `obj` is a generator. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ +function isGenerator(obj) { + return obj && 'function' == typeof obj.next && 'function' == typeof obj.throw; +} +/** + * Check if `obj` is a generator function. + * + * @param {Mixed} obj + * @return {Boolean} + * @api private + */ -var CONTINUE$4 = true; -var SKIP$4 = 'skip'; -var EXIT$4 = false; +function isGeneratorFunction(obj) { + return obj && obj.constructor && 'GeneratorFunction' == obj.constructor.name; +} -visitParents$2.CONTINUE = CONTINUE$4; -visitParents$2.SKIP = SKIP$4; -visitParents$2.EXIT = EXIT$4; +/** + * Check for plain object. + * + * @param {Mixed} val + * @return {Boolean} + * @api private + */ -function visitParents$2(tree, test, visitor, reverse) { - var is; +function isObject$3(val) { + return val && Object == val.constructor; +} - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +/** + * Throw `err` in a new stack. + * + * This is used when co() is invoked + * without supplying a callback, which + * should only be for demonstrational + * purposes. + * + * @param {Error} err + * @api private + */ - is = convert_1$2(test); +function error(err) { + if (!err) return; + setImmediate(function(){ + throw err; + }); +} - one(tree, null, []); +/** + * Module Dependencies + */ - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$2(visitor(node, parents)); +var noop$3 = function(){}; - if (result[0] === EXIT$4) { - return result - } - } - if (node.children && result[0] !== SKIP$4) { - subresult = toResult$2(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$4 ? subresult : result - } +/** + * Export `wrapped` + */ - return result - } +var wrapped_1 = wrapped; - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; +/** + * Wrap a function to support + * sync, async, and gen functions. + * + * @param {Function} fn + * @return {Function} + * @api public + */ - while (index > min && index < children.length) { - result = one(children[index], index, parents); +function wrapped(fn) { + function wrap() { + var args = sliced(arguments); + var last = args[args.length - 1]; + var ctx = this; - if (result[0] === EXIT$4) { - return result - } + // done + var done = typeof last == 'function' ? args.pop() : noop$3; - index = typeof result[1] === 'number' ? result[1] : index + step; + // nothing + if (!fn) { + return done.apply(ctx, [null].concat(args)); } - } -} -function toResult$2(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } + // generator + if (generator(fn)) { + return co_1(fn).apply(ctx, args.concat(done)); + } - if (typeof value === 'number') { - return [CONTINUE$4, value] + // async + if (fn.length > args.length) { + // NOTE: this only handles uncaught synchronous errors + try { + return fn.apply(ctx, args.concat(done)); + } catch (e) { + return done(e); + } + } + + // sync + return sync$5(fn, done).apply(ctx, args); } - return [value] + return wrap; } -var unistUtilVisit$2 = visit$2; +/** + * Wrap a synchronous function execution. + * + * @param {Function} fn + * @param {Function} done + * @return {Function} + * @api private + */ + +function sync$5(fn, done) { + return function () { + var ret; + try { + ret = fn.apply(this, arguments); + } catch (err) { + return done(err); + } + if (promise(ret)) { + ret.then(function (value) { done(null, value); }, done); + } else { + ret instanceof Error ? done(ret) : done(null, ret); + } + } +} -var CONTINUE$5 = unistUtilVisitParents$2.CONTINUE; -var SKIP$5 = unistUtilVisitParents$2.SKIP; -var EXIT$5 = unistUtilVisitParents$2.EXIT; +/** + * Is `value` a generator? + * + * @param {Mixed} value + * @return {Boolean} + * @api private + */ -visit$2.CONTINUE = CONTINUE$5; -visit$2.SKIP = SKIP$5; -visit$2.EXIT = EXIT$5; +function generator(value) { + return value + && value.constructor + && 'GeneratorFunction' == value.constructor.name; +} -function visit$2(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - unistUtilVisitParents$2(tree, test, overload, reverse); +/** + * Is `value` a promise? + * + * @param {Mixed} value + * @return {Boolean} + * @api private + */ - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } +function promise(value) { + return value && 'function' == typeof value.then; } -var unifiedMessageControl$1 = messageControl$2; +var unifiedLintRule = factory$8; -function messageControl$2(options) { - var settings = options || {}; - var name = settings.name; - var marker = settings.marker; - var test = settings.test; - var sources = settings.source; - var known = settings.known; - var reset = settings.reset; - var enable = settings.enable || []; - var disable = settings.disable || []; +function factory$8(id, rule) { + var parts = id.split(':'); + var source = parts[0]; + var ruleId = parts[1]; + var fn = wrapped_1(rule); - if (!name) { - throw new Error('Expected `name` in `options`, got `' + name + '`') + /* istanbul ignore if - possibly useful if externalised later. */ + if (!ruleId) { + ruleId = source; + source = null; } - if (!marker) { - throw new Error('Expected `marker` in `options`, got `' + marker + '`') - } - - if (!sources) { - sources = [name]; - } else if (typeof sources === 'string') { - sources = [sources]; - } - - return transformer - - function transformer(tree, file) { - var toOffset = vfileLocation$2(file).toOffset; - var initial = !reset; - var gaps = detectGaps$1(tree, file); - var scope = {}; - var globals = []; - - unistUtilVisit$2(tree, test, visitor); + attacher.displayName = id; - file.messages = file.messages.filter(filter); + return attacher - function visitor(node, position, parent) { - var mark = marker(node); - var ruleIds; - var ruleId; - var verb; - var index; - var length; - var next; - var pos; - var tail; + function attacher(raw) { + var config = coerce(ruleId, raw); + var severity = config[0]; + var options = config[1]; + var fatal = severity === 2; - if (!mark || mark.name !== name) { - return - } + return severity ? transformer : undefined - ruleIds = mark.attributes.split(/\s/g); - verb = ruleIds.shift(); - next = parent.children[position + 1]; - pos = mark.node.position && mark.node.position.start; - tail = next && next.position && next.position.end; + function transformer(tree, file, next) { + var index = file.messages.length; - if (verb !== 'enable' && verb !== 'disable' && verb !== 'ignore') { - file.fail( - 'Unknown keyword `' + - verb + - '`: expected ' + - "`'enable'`, `'disable'`, or `'ignore'`", - mark.node - ); - } + fn(tree, file, options, done); - length = ruleIds.length; - index = -1; + function done(err) { + var messages = file.messages; + var message; - // Apply to all rules. - if (length === 0) { - if (verb === 'ignore') { - toggle(pos, false); - toggle(tail, true); - } else { - toggle(pos, verb === 'enable'); - reset = verb !== 'enable'; + // Add the error, if not already properly added. + /* istanbul ignore if - only happens for incorrect plugins */ + if (err && messages.indexOf(err) === -1) { + try { + file.fail(err); + } catch (_) {} } - } else { - while (++index < length) { - ruleId = ruleIds[index]; - if (isKnown(ruleId, verb, mark.node)) { - toggle(pos, verb === 'enable', ruleId); + while (index < messages.length) { + message = messages[index]; + message.ruleId = ruleId; + message.source = source; + message.fatal = fatal; - if (verb === 'ignore') { - toggle(tail, true, ruleId); - } - } + index++; } - } - } - - function filter(message) { - var gapIndex = gaps.length; - var ruleId = message.ruleId; - var ranges = scope[ruleId]; - var pos; - // Keep messages from a different source. - if (!message.source || sources.indexOf(message.source) === -1) { - return true - } - - // We only ignore messages if they‘re disabled, *not* when they’re not in - // the document. - if (!message.line) { - message.line = 1; + next(); } + } + } +} - if (!message.column) { - message.column = 1; - } +// Coerce a value to a severity--options tuple. +function coerce(name, value) { + var def = 1; + var result; + var level; - // Check whether the warning is inside a gap. - pos = toOffset(message); + /* istanbul ignore if - Handled by unified in v6.0.0 */ + if (typeof value === 'boolean') { + result = [value]; + } else if (value == null) { + result = [def]; + } else if ( + typeof value === 'object' && + (typeof value[0] === 'number' || + typeof value[0] === 'boolean' || + typeof value[0] === 'string') + ) { + result = value.concat(); + } else { + result = [1, value]; + } - while (gapIndex--) { - if (gaps[gapIndex].start <= pos && gaps[gapIndex].end > pos) { - return false - } - } + level = result[0]; - // Check whether allowed by specific and global states. - return check(message, ranges, ruleId) && check(message, globals) + if (typeof level === 'boolean') { + level = level ? 1 : 0; + } else if (typeof level === 'string') { + if (level === 'off') { + level = 0; + } else if (level === 'on' || level === 'warn') { + level = 1; + } else if (level === 'error') { + level = 2; + } else { + level = 1; + result = [level, result]; } + } - // Helper to check (and possibly warn) if a `ruleId` is unknown. - function isKnown(ruleId, verb, pos) { - var result = known ? known.indexOf(ruleId) !== -1 : true; + if (level < 0 || level > 2) { + throw new Error( + 'Incorrect severity `' + + level + + '` for `' + + name + + '`, ' + + 'expected 0, 1, or 2' + ) + } - if (!result) { - file.message( - 'Unknown rule: cannot ' + verb + " `'" + ruleId + "'`", - pos - ); - } + result[0] = level; - return result - } + return result +} - // Get the latest state of a rule. - // When without `ruleId`, gets global state. - function getState(ruleId) { - var ranges = ruleId ? scope[ruleId] : globals; +var remarkLintFinalNewline = unifiedLintRule('remark-lint:final-newline', finalNewline); - if (ranges && ranges.length !== 0) { - return ranges[ranges.length - 1].state - } +function finalNewline(tree, file) { + var contents = String(file); + var last = contents.length - 1; - if (!ruleId) { - return !reset - } + if (last > -1 && contents.charAt(last) !== '\n') { + file.message('Missing newline character at end of file'); + } +} - if (reset) { - return enable.indexOf(ruleId) !== -1 - } +var pluralize = createCommonjsModule(function (module, exports) { +/* global define */ - return disable.indexOf(ruleId) === -1 +(function (root, pluralize) { + /* istanbul ignore else */ + if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { + // Node. + module.exports = pluralize(); + } else { + // Browser global. + root.pluralize = pluralize(); + } +})(commonjsGlobal, function () { + // Rule storage - pluralize and singularize need to be run sequentially, + // while other rules can be optimized using an object for instant lookups. + var pluralRules = []; + var singularRules = []; + var uncountables = {}; + var irregularPlurals = {}; + var irregularSingles = {}; + + /** + * Sanitize a pluralization rule to a usable regular expression. + * + * @param {(RegExp|string)} rule + * @return {RegExp} + */ + function sanitizeRule (rule) { + if (typeof rule === 'string') { + return new RegExp('^' + rule + '$', 'i'); } - // Handle a rule. - function toggle(pos, state, ruleId) { - var markers = ruleId ? scope[ruleId] : globals; - var previousState; + return rule; + } - if (!markers) { - markers = []; - scope[ruleId] = markers; - } + /** + * Pass in a word token to produce a function that can replicate the case on + * another word. + * + * @param {string} word + * @param {string} token + * @return {Function} + */ + function restoreCase (word, token) { + // Tokens are an exact match. + if (word === token) return token; - previousState = getState(ruleId); + // Lower cased words. E.g. "hello". + if (word === word.toLowerCase()) return token.toLowerCase(); - if (state !== previousState) { - markers.push({state: state, position: pos}); - } + // Upper cased words. E.g. "WHISKY". + if (word === word.toUpperCase()) return token.toUpperCase(); - // Toggle all known rules. - if (!ruleId) { - for (ruleId in scope) { - toggle(pos, state, ruleId); - } - } + // Title cased words. E.g. "Title". + if (word[0] === word[0].toUpperCase()) { + return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); } - // Check all `ranges` for `message`. - function check(message, ranges, id) { - // Check the state at the message’s position. - var index = ranges && ranges.length; - var length = -1; - var range; + // Lower cased words. E.g. "test". + return token.toLowerCase(); + } - while (--index > length) { - range = ranges[index]; + /** + * Interpolate a regexp string. + * + * @param {string} str + * @param {Array} args + * @return {string} + */ + function interpolate (str, args) { + return str.replace(/\$(\d{1,2})/g, function (match, index) { + return args[index] || ''; + }); + } - /* istanbul ignore if - Generated marker. */ - if (!range.position || !range.position.line || !range.position.column) { - continue - } + /** + * Replace a word using a rule. + * + * @param {string} word + * @param {Array} rule + * @return {string} + */ + function replace (word, rule) { + return word.replace(rule[0], function (match, index) { + var result = interpolate(rule[1], arguments); - if ( - range.position.line < message.line || - (range.position.line === message.line && - range.position.column <= message.column) - ) { - return range.state === true - } + if (match === '') { + return restoreCase(word[index - 1], result); } - // The first marker ocurred after the first message, so we check the - // initial state. - if (!id) { - return initial || reset - } + return restoreCase(match, result); + }); + } - return reset ? enable.indexOf(id) !== -1 : disable.indexOf(id) === -1 + /** + * Sanitize a word by passing in the word and sanitization rules. + * + * @param {string} token + * @param {string} word + * @param {Array} rules + * @return {string} + */ + function sanitizeWord (token, word, rules) { + // Empty string or doesn't need fixing. + if (!token.length || uncountables.hasOwnProperty(token)) { + return word; } - } -} -// Detect gaps in `tree`. -function detectGaps$1(tree, file) { - var lastNode = tree.children[tree.children.length - 1]; - var offset = 0; - var isGap = false; - var gaps = []; + var len = rules.length; - // Find all gaps. - unistUtilVisit$2(tree, one); + // Iterate over the sanitization rules and use the first one to match. + while (len--) { + var rule = rules[len]; - // Get the end of the document. - // This detects if the last node was the last node. - // If not, there’s an extra gap between the last node and the end of the - // document. - if ( - lastNode && - lastNode.position && - lastNode.position.end && - offset === lastNode.position.end.offset && - trim$1(file.toString().slice(offset)) !== '' - ) { - update(); + if (rule[0].test(word)) return replace(word, rule); + } - update( - tree && tree.position && tree.position.end && tree.position.end.offset - 1 - ); + return word; } - return gaps + /** + * Replace a word with the updated word. + * + * @param {Object} replaceMap + * @param {Object} keepMap + * @param {Array} rules + * @return {Function} + */ + function replaceWord (replaceMap, keepMap, rules) { + return function (word) { + // Get the correct token and case restoration functions. + var token = word.toLowerCase(); - function one(node) { - var pos = node.position; + // Check against the keep object map. + if (keepMap.hasOwnProperty(token)) { + return restoreCase(word, token); + } - update(pos && pos.start && pos.start.offset); + // Check against the replacement map for a direct word replacement. + if (replaceMap.hasOwnProperty(token)) { + return restoreCase(word, replaceMap[token]); + } - if (!node.children) { - update(pos && pos.end && pos.end.offset); - } + // Run all the rules against the word. + return sanitizeWord(token, word, rules); + }; } - // Detect a new position. - function update(latest) { - if (latest === null || latest === undefined) { - isGap = true; - return - } - - if (offset >= latest) { - return - } + /** + * Check if a word is part of the map. + */ + function checkWord (replaceMap, keepMap, rules, bool) { + return function (word) { + var token = word.toLowerCase(); - if (isGap) { - gaps.push({start: offset, end: latest}); - isGap = false; - } + if (keepMap.hasOwnProperty(token)) return true; + if (replaceMap.hasOwnProperty(token)) return false; - offset = latest; + return sanitizeWord(token, token, rules) === token; + }; } -} - -function trim$1(value) { - return value.replace(/^\s*|\s*$/g, '') -} - -var remarkMessageControl$1 = messageControl$3; -var test$1 = [ - 'html', // Comments are `html` nodes in mdast. - 'comment' // In MDX, comments have their own node. -]; - -function messageControl$3(options) { - return unifiedMessageControl$1(Object.assign({marker: mdastCommentMarker, test: test$1}, options)) -} + /** + * Pluralize or singularize a word based on the passed in count. + * + * @param {string} word The word to pluralize + * @param {number} count How many of the word exist + * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks) + * @return {string} + */ + function pluralize (word, count, inclusive) { + var pluralized = count === 1 + ? pluralize.singular(word) : pluralize.plural(word); -var remarkLint$1 = lint$1; + return (inclusive ? count + ' ' : '') + pluralized; + } -// `remark-lint`. -// This adds support for ignoring stuff from messages (``). -// All rules are in their own packages and presets. -function lint$1() { - this.use(lintMessageControl$1); -} + /** + * Pluralize a word. + * + * @type {Function} + */ + pluralize.plural = replaceWord( + irregularSingles, irregularPlurals, pluralRules + ); -function lintMessageControl$1() { - return remarkMessageControl$1({name: 'lint', source: 'remark-lint'}) -} + /** + * Check if a word is plural. + * + * @type {Function} + */ + pluralize.isPlural = checkWord( + irregularSingles, irregularPlurals, pluralRules + ); -/** - * An Array.prototype.slice.call(arguments) alternative - * - * @param {Object} args something with a length - * @param {Number} slice - * @param {Number} sliceEnd - * @api public - */ + /** + * Singularize a word. + * + * @type {Function} + */ + pluralize.singular = replaceWord( + irregularPlurals, irregularSingles, singularRules + ); -var sliced = function (args, slice, sliceEnd) { - var ret = []; - var len = args.length; + /** + * Check if a word is singular. + * + * @type {Function} + */ + pluralize.isSingular = checkWord( + irregularPlurals, irregularSingles, singularRules + ); - if (0 === len) return ret; + /** + * Add a pluralization rule to the collection. + * + * @param {(string|RegExp)} rule + * @param {string} replacement + */ + pluralize.addPluralRule = function (rule, replacement) { + pluralRules.push([sanitizeRule(rule), replacement]); + }; - var start = slice < 0 - ? Math.max(0, slice + len) - : slice || 0; + /** + * Add a singularization rule to the collection. + * + * @param {(string|RegExp)} rule + * @param {string} replacement + */ + pluralize.addSingularRule = function (rule, replacement) { + singularRules.push([sanitizeRule(rule), replacement]); + }; - if (sliceEnd !== undefined) { - len = sliceEnd < 0 - ? sliceEnd + len - : sliceEnd; - } - - while (len-- > start) { - ret[len - start] = args[len]; - } - - return ret; -}; - -/** - * slice() reference. - */ - -var slice$4 = Array.prototype.slice; - -/** - * Expose `co`. - */ - -var co_1 = co; - -/** - * Wrap the given generator `fn` and - * return a thunk. - * - * @param {Function} fn - * @return {Function} - * @api public - */ - -function co(fn) { - var isGenFun = isGeneratorFunction(fn); - - return function (done) { - var ctx = this; - - // in toThunk() below we invoke co() - // with a generator, so optimize for - // this case - var gen = fn; - - // we only need to parse the arguments - // if gen is a generator function. - if (isGenFun) { - var args = slice$4.call(arguments), len = args.length; - var hasCallback = len && 'function' == typeof args[len - 1]; - done = hasCallback ? args.pop() : error; - gen = fn.apply(this, args); - } else { - done = done || error; - } - - next(); - - // #92 - // wrap the callback in a setImmediate - // so that any of its errors aren't caught by `co` - function exit(err, res) { - setImmediate(function(){ - done.call(ctx, err, res); - }); - } - - function next(err, res) { - var ret; - - // multiple args - if (arguments.length > 2) res = slice$4.call(arguments, 1); - - // error - if (err) { - try { - ret = gen.throw(err); - } catch (e) { - return exit(e); - } - } - - // ok - if (!err) { - try { - ret = gen.next(res); - } catch (e) { - return exit(e); - } - } - - // done - if (ret.done) return exit(null, ret.value); - - // normalize - ret.value = toThunk(ret.value, ctx); - - // run - if ('function' == typeof ret.value) { - var called = false; - try { - ret.value.call(ctx, function(){ - if (called) return; - called = true; - next.apply(ctx, arguments); - }); - } catch (e) { - setImmediate(function(){ - if (called) return; - called = true; - next(e); - }); - } - return; - } - - // invalid - next(new TypeError('You may only yield a function, promise, generator, array, or object, ' - + 'but the following was passed: "' + String(ret.value) + '"')); - } - } -} - -/** - * Convert `obj` into a normalized thunk. - * - * @param {Mixed} obj - * @param {Mixed} ctx - * @return {Function} - * @api private - */ - -function toThunk(obj, ctx) { - - if (isGeneratorFunction(obj)) { - return co(obj.call(ctx)); - } - - if (isGenerator(obj)) { - return co(obj); - } - - if (isPromise(obj)) { - return promiseToThunk(obj); - } - - if ('function' == typeof obj) { - return obj; - } - - if (isObject$3(obj) || Array.isArray(obj)) { - return objectToThunk.call(ctx, obj); - } - - return obj; -} - -/** - * Convert an object of yieldables to a thunk. - * - * @param {Object} obj - * @return {Function} - * @api private - */ - -function objectToThunk(obj){ - var ctx = this; - var isArray = Array.isArray(obj); - - return function(done){ - var keys = Object.keys(obj); - var pending = keys.length; - var results = isArray - ? new Array(pending) // predefine the array length - : new obj.constructor(); - var finished; - - if (!pending) { - setImmediate(function(){ - done(null, results); - }); + /** + * Add an uncountable word rule. + * + * @param {(string|RegExp)} word + */ + pluralize.addUncountableRule = function (word) { + if (typeof word === 'string') { + uncountables[word.toLowerCase()] = true; return; } - // prepopulate object keys to preserve key ordering - if (!isArray) { - for (var i = 0; i < pending; i++) { - results[keys[i]] = undefined; - } - } - - for (var i = 0; i < keys.length; i++) { - run(obj[keys[i]], keys[i]); - } - - function run(fn, key) { - if (finished) return; - try { - fn = toThunk(fn, ctx); - - if ('function' != typeof fn) { - results[key] = fn; - return --pending || done(null, results); - } - - fn.call(ctx, function(err, res){ - if (finished) return; - - if (err) { - finished = true; - return done(err); - } - - results[key] = res; - --pending || done(null, results); - }); - } catch (err) { - finished = true; - done(err); - } - } - } -} - -/** - * Convert `promise` to a thunk. - * - * @param {Object} promise - * @return {Function} - * @api private - */ - -function promiseToThunk(promise) { - return function(fn){ - promise.then(function(res) { - fn(null, res); - }, fn); - } -} - -/** - * Check if `obj` is a promise. - * - * @param {Object} obj - * @return {Boolean} - * @api private - */ - -function isPromise(obj) { - return obj && 'function' == typeof obj.then; -} - -/** - * Check if `obj` is a generator. - * - * @param {Mixed} obj - * @return {Boolean} - * @api private - */ - -function isGenerator(obj) { - return obj && 'function' == typeof obj.next && 'function' == typeof obj.throw; -} - -/** - * Check if `obj` is a generator function. - * - * @param {Mixed} obj - * @return {Boolean} - * @api private - */ - -function isGeneratorFunction(obj) { - return obj && obj.constructor && 'GeneratorFunction' == obj.constructor.name; -} - -/** - * Check for plain object. - * - * @param {Mixed} val - * @return {Boolean} - * @api private - */ + // Set singular and plural references for the word. + pluralize.addPluralRule(word, '$0'); + pluralize.addSingularRule(word, '$0'); + }; -function isObject$3(val) { - return val && Object == val.constructor; -} + /** + * Add an irregular word definition. + * + * @param {string} single + * @param {string} plural + */ + pluralize.addIrregularRule = function (single, plural) { + plural = plural.toLowerCase(); + single = single.toLowerCase(); -/** - * Throw `err` in a new stack. - * - * This is used when co() is invoked - * without supplying a callback, which - * should only be for demonstrational - * purposes. - * - * @param {Error} err - * @api private - */ + irregularSingles[single] = plural; + irregularPlurals[plural] = single; + }; -function error(err) { - if (!err) return; - setImmediate(function(){ - throw err; + /** + * Irregular rules. + */ + [ + // Pronouns. + ['I', 'we'], + ['me', 'us'], + ['he', 'they'], + ['she', 'they'], + ['them', 'them'], + ['myself', 'ourselves'], + ['yourself', 'yourselves'], + ['itself', 'themselves'], + ['herself', 'themselves'], + ['himself', 'themselves'], + ['themself', 'themselves'], + ['is', 'are'], + ['was', 'were'], + ['has', 'have'], + ['this', 'these'], + ['that', 'those'], + // Words ending in with a consonant and `o`. + ['echo', 'echoes'], + ['dingo', 'dingoes'], + ['volcano', 'volcanoes'], + ['tornado', 'tornadoes'], + ['torpedo', 'torpedoes'], + // Ends with `us`. + ['genus', 'genera'], + ['viscus', 'viscera'], + // Ends with `ma`. + ['stigma', 'stigmata'], + ['stoma', 'stomata'], + ['dogma', 'dogmata'], + ['lemma', 'lemmata'], + ['schema', 'schemata'], + ['anathema', 'anathemata'], + // Other irregular rules. + ['ox', 'oxen'], + ['axe', 'axes'], + ['die', 'dice'], + ['yes', 'yeses'], + ['foot', 'feet'], + ['eave', 'eaves'], + ['goose', 'geese'], + ['tooth', 'teeth'], + ['quiz', 'quizzes'], + ['human', 'humans'], + ['proof', 'proofs'], + ['carve', 'carves'], + ['valve', 'valves'], + ['looey', 'looies'], + ['thief', 'thieves'], + ['groove', 'grooves'], + ['pickaxe', 'pickaxes'], + ['passerby', 'passersby'] + ].forEach(function (rule) { + return pluralize.addIrregularRule(rule[0], rule[1]); }); -} - -/** - * Module Dependencies - */ - - -var noop$3 = function(){}; - - -/** - * Export `wrapped` - */ - -var wrapped_1 = wrapped; - -/** - * Wrap a function to support - * sync, async, and gen functions. - * - * @param {Function} fn - * @return {Function} - * @api public - */ - -function wrapped(fn) { - function wrap() { - var args = sliced(arguments); - var last = args[args.length - 1]; - var ctx = this; - - // done - var done = typeof last == 'function' ? args.pop() : noop$3; - - // nothing - if (!fn) { - return done.apply(ctx, [null].concat(args)); - } - - // generator - if (generator(fn)) { - return co_1(fn).apply(ctx, args.concat(done)); - } - - // async - if (fn.length > args.length) { - // NOTE: this only handles uncaught synchronous errors - try { - return fn.apply(ctx, args.concat(done)); - } catch (e) { - return done(e); - } - } - - // sync - return sync$5(fn, done).apply(ctx, args); - } - return wrap; -} + /** + * Pluralization rules. + */ + [ + [/s?$/i, 's'], + [/[^\u0000-\u007F]$/i, '$0'], + [/([^aeiou]ese)$/i, '$1'], + [/(ax|test)is$/i, '$1es'], + [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], + [/(e[mn]u)s?$/i, '$1s'], + [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], + [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], + [/(seraph|cherub)(?:im)?$/i, '$1im'], + [/(her|at|gr)o$/i, '$1oes'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], + [/sis$/i, 'ses'], + [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], + [/([^aeiouy]|qu)y$/i, '$1ies'], + [/([^ch][ieo][ln])ey$/i, '$1ies'], + [/(x|ch|ss|sh|zz)$/i, '$1es'], + [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], + [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], + [/(pe)(?:rson|ople)$/i, '$1ople'], + [/(child)(?:ren)?$/i, '$1ren'], + [/eaux$/i, '$0'], + [/m[ae]n$/i, 'men'], + ['thou', 'you'] + ].forEach(function (rule) { + return pluralize.addPluralRule(rule[0], rule[1]); + }); -/** - * Wrap a synchronous function execution. - * - * @param {Function} fn - * @param {Function} done - * @return {Function} - * @api private - */ - -function sync$5(fn, done) { - return function () { - var ret; - - try { - ret = fn.apply(this, arguments); - } catch (err) { - return done(err); - } - - if (promise(ret)) { - ret.then(function (value) { done(null, value); }, done); - } else { - ret instanceof Error ? done(ret) : done(null, ret); - } - } -} - -/** - * Is `value` a generator? - * - * @param {Mixed} value - * @return {Boolean} - * @api private - */ - -function generator(value) { - return value - && value.constructor - && 'GeneratorFunction' == value.constructor.name; -} - - -/** - * Is `value` a promise? - * - * @param {Mixed} value - * @return {Boolean} - * @api private - */ - -function promise(value) { - return value && 'function' == typeof value.then; -} - -var unifiedLintRule = factory$9; - -function factory$9(id, rule) { - var parts = id.split(':'); - var source = parts[0]; - var ruleId = parts[1]; - var fn = wrapped_1(rule); - - /* istanbul ignore if - possibly useful if externalised later. */ - if (!ruleId) { - ruleId = source; - source = null; - } - - attacher.displayName = id; - - return attacher - - function attacher(raw) { - var config = coerce(ruleId, raw); - var severity = config[0]; - var options = config[1]; - var fatal = severity === 2; - - return severity ? transformer : undefined - - function transformer(tree, file, next) { - var index = file.messages.length; - - fn(tree, file, options, done); - - function done(err) { - var messages = file.messages; - var message; - - // Add the error, if not already properly added. - /* istanbul ignore if - only happens for incorrect plugins */ - if (err && messages.indexOf(err) === -1) { - try { - file.fail(err); - } catch (_) {} - } - - while (index < messages.length) { - message = messages[index]; - message.ruleId = ruleId; - message.source = source; - message.fatal = fatal; - - index++; - } - - next(); - } - } - } -} - -// Coerce a value to a severity--options tuple. -function coerce(name, value) { - var def = 1; - var result; - var level; - - /* istanbul ignore if - Handled by unified in v6.0.0 */ - if (typeof value === 'boolean') { - result = [value]; - } else if (value == null) { - result = [def]; - } else if ( - typeof value === 'object' && - (typeof value[0] === 'number' || - typeof value[0] === 'boolean' || - typeof value[0] === 'string') - ) { - result = value.concat(); - } else { - result = [1, value]; - } - - level = result[0]; - - if (typeof level === 'boolean') { - level = level ? 1 : 0; - } else if (typeof level === 'string') { - if (level === 'off') { - level = 0; - } else if (level === 'on' || level === 'warn') { - level = 1; - } else if (level === 'error') { - level = 2; - } else { - level = 1; - result = [level, result]; - } - } - - if (level < 0 || level > 2) { - throw new Error( - 'Incorrect severity `' + - level + - '` for `' + - name + - '`, ' + - 'expected 0, 1, or 2' - ) - } - - result[0] = level; - - return result -} - -var remarkLintFinalNewline = unifiedLintRule('remark-lint:final-newline', finalNewline); - -function finalNewline(tree, file) { - var contents = String(file); - var last = contents.length - 1; - - if (last > -1 && contents.charAt(last) !== '\n') { - file.message('Missing newline character at end of file'); - } -} - -var pluralize = createCommonjsModule(function (module, exports) { -/* global define */ - -(function (root, pluralize) { - /* istanbul ignore else */ - if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') { - // Node. - module.exports = pluralize(); - } else { - // Browser global. - root.pluralize = pluralize(); - } -})(commonjsGlobal, function () { - // Rule storage - pluralize and singularize need to be run sequentially, - // while other rules can be optimized using an object for instant lookups. - var pluralRules = []; - var singularRules = []; - var uncountables = {}; - var irregularPlurals = {}; - var irregularSingles = {}; - - /** - * Sanitize a pluralization rule to a usable regular expression. - * - * @param {(RegExp|string)} rule - * @return {RegExp} - */ - function sanitizeRule (rule) { - if (typeof rule === 'string') { - return new RegExp('^' + rule + '$', 'i'); - } - - return rule; - } - - /** - * Pass in a word token to produce a function that can replicate the case on - * another word. - * - * @param {string} word - * @param {string} token - * @return {Function} - */ - function restoreCase (word, token) { - // Tokens are an exact match. - if (word === token) return token; - - // Lower cased words. E.g. "hello". - if (word === word.toLowerCase()) return token.toLowerCase(); - - // Upper cased words. E.g. "WHISKY". - if (word === word.toUpperCase()) return token.toUpperCase(); - - // Title cased words. E.g. "Title". - if (word[0] === word[0].toUpperCase()) { - return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase(); - } - - // Lower cased words. E.g. "test". - return token.toLowerCase(); - } - - /** - * Interpolate a regexp string. - * - * @param {string} str - * @param {Array} args - * @return {string} - */ - function interpolate (str, args) { - return str.replace(/\$(\d{1,2})/g, function (match, index) { - return args[index] || ''; - }); - } - - /** - * Replace a word using a rule. - * - * @param {string} word - * @param {Array} rule - * @return {string} - */ - function replace (word, rule) { - return word.replace(rule[0], function (match, index) { - var result = interpolate(rule[1], arguments); - - if (match === '') { - return restoreCase(word[index - 1], result); - } - - return restoreCase(match, result); - }); - } - - /** - * Sanitize a word by passing in the word and sanitization rules. - * - * @param {string} token - * @param {string} word - * @param {Array} rules - * @return {string} - */ - function sanitizeWord (token, word, rules) { - // Empty string or doesn't need fixing. - if (!token.length || uncountables.hasOwnProperty(token)) { - return word; - } - - var len = rules.length; - - // Iterate over the sanitization rules and use the first one to match. - while (len--) { - var rule = rules[len]; - - if (rule[0].test(word)) return replace(word, rule); - } - - return word; - } - - /** - * Replace a word with the updated word. - * - * @param {Object} replaceMap - * @param {Object} keepMap - * @param {Array} rules - * @return {Function} - */ - function replaceWord (replaceMap, keepMap, rules) { - return function (word) { - // Get the correct token and case restoration functions. - var token = word.toLowerCase(); - - // Check against the keep object map. - if (keepMap.hasOwnProperty(token)) { - return restoreCase(word, token); - } - - // Check against the replacement map for a direct word replacement. - if (replaceMap.hasOwnProperty(token)) { - return restoreCase(word, replaceMap[token]); - } - - // Run all the rules against the word. - return sanitizeWord(token, word, rules); - }; - } - - /** - * Check if a word is part of the map. - */ - function checkWord (replaceMap, keepMap, rules, bool) { - return function (word) { - var token = word.toLowerCase(); - - if (keepMap.hasOwnProperty(token)) return true; - if (replaceMap.hasOwnProperty(token)) return false; - - return sanitizeWord(token, token, rules) === token; - }; - } - - /** - * Pluralize or singularize a word based on the passed in count. - * - * @param {string} word The word to pluralize - * @param {number} count How many of the word exist - * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks) - * @return {string} - */ - function pluralize (word, count, inclusive) { - var pluralized = count === 1 - ? pluralize.singular(word) : pluralize.plural(word); - - return (inclusive ? count + ' ' : '') + pluralized; - } - - /** - * Pluralize a word. - * - * @type {Function} - */ - pluralize.plural = replaceWord( - irregularSingles, irregularPlurals, pluralRules - ); - - /** - * Check if a word is plural. - * - * @type {Function} - */ - pluralize.isPlural = checkWord( - irregularSingles, irregularPlurals, pluralRules - ); - - /** - * Singularize a word. - * - * @type {Function} - */ - pluralize.singular = replaceWord( - irregularPlurals, irregularSingles, singularRules - ); - - /** - * Check if a word is singular. - * - * @type {Function} - */ - pluralize.isSingular = checkWord( - irregularPlurals, irregularSingles, singularRules - ); - - /** - * Add a pluralization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement - */ - pluralize.addPluralRule = function (rule, replacement) { - pluralRules.push([sanitizeRule(rule), replacement]); - }; - - /** - * Add a singularization rule to the collection. - * - * @param {(string|RegExp)} rule - * @param {string} replacement - */ - pluralize.addSingularRule = function (rule, replacement) { - singularRules.push([sanitizeRule(rule), replacement]); - }; - - /** - * Add an uncountable word rule. - * - * @param {(string|RegExp)} word - */ - pluralize.addUncountableRule = function (word) { - if (typeof word === 'string') { - uncountables[word.toLowerCase()] = true; - return; - } - - // Set singular and plural references for the word. - pluralize.addPluralRule(word, '$0'); - pluralize.addSingularRule(word, '$0'); - }; - - /** - * Add an irregular word definition. - * - * @param {string} single - * @param {string} plural - */ - pluralize.addIrregularRule = function (single, plural) { - plural = plural.toLowerCase(); - single = single.toLowerCase(); - - irregularSingles[single] = plural; - irregularPlurals[plural] = single; - }; - - /** - * Irregular rules. - */ - [ - // Pronouns. - ['I', 'we'], - ['me', 'us'], - ['he', 'they'], - ['she', 'they'], - ['them', 'them'], - ['myself', 'ourselves'], - ['yourself', 'yourselves'], - ['itself', 'themselves'], - ['herself', 'themselves'], - ['himself', 'themselves'], - ['themself', 'themselves'], - ['is', 'are'], - ['was', 'were'], - ['has', 'have'], - ['this', 'these'], - ['that', 'those'], - // Words ending in with a consonant and `o`. - ['echo', 'echoes'], - ['dingo', 'dingoes'], - ['volcano', 'volcanoes'], - ['tornado', 'tornadoes'], - ['torpedo', 'torpedoes'], - // Ends with `us`. - ['genus', 'genera'], - ['viscus', 'viscera'], - // Ends with `ma`. - ['stigma', 'stigmata'], - ['stoma', 'stomata'], - ['dogma', 'dogmata'], - ['lemma', 'lemmata'], - ['schema', 'schemata'], - ['anathema', 'anathemata'], - // Other irregular rules. - ['ox', 'oxen'], - ['axe', 'axes'], - ['die', 'dice'], - ['yes', 'yeses'], - ['foot', 'feet'], - ['eave', 'eaves'], - ['goose', 'geese'], - ['tooth', 'teeth'], - ['quiz', 'quizzes'], - ['human', 'humans'], - ['proof', 'proofs'], - ['carve', 'carves'], - ['valve', 'valves'], - ['looey', 'looies'], - ['thief', 'thieves'], - ['groove', 'grooves'], - ['pickaxe', 'pickaxes'], - ['passerby', 'passersby'] - ].forEach(function (rule) { - return pluralize.addIrregularRule(rule[0], rule[1]); - }); + /** + * Singularization rules. + */ + [ + [/s$/i, ''], + [/(ss)$/i, '$1'], + [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], + [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], + [/ies$/i, 'y'], + [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], + [/\b(mon|smil)ies$/i, '$1ey'], + [/\b((?:tit)?m|l)ice$/i, '$1ouse'], + [/(seraph|cherub)im$/i, '$1'], + [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], + [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], + [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], + [/(test)(?:is|es)$/i, '$1is'], + [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], + [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], + [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], + [/(alumn|alg|vertebr)ae$/i, '$1a'], + [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], + [/(matr|append)ices$/i, '$1ix'], + [/(pe)(rson|ople)$/i, '$1rson'], + [/(child)ren$/i, '$1'], + [/(eau)x?$/i, '$1'], + [/men$/i, 'man'] + ].forEach(function (rule) { + return pluralize.addSingularRule(rule[0], rule[1]); + }); /** - * Pluralization rules. - */ - [ - [/s?$/i, 's'], - [/[^\u0000-\u007F]$/i, '$0'], - [/([^aeiou]ese)$/i, '$1'], - [/(ax|test)is$/i, '$1es'], - [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'], - [/(e[mn]u)s?$/i, '$1s'], - [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'], - [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'], - [/(seraph|cherub)(?:im)?$/i, '$1im'], - [/(her|at|gr)o$/i, '$1oes'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'], - [/sis$/i, 'ses'], - [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'], - [/([^aeiouy]|qu)y$/i, '$1ies'], - [/([^ch][ieo][ln])ey$/i, '$1ies'], - [/(x|ch|ss|sh|zz)$/i, '$1es'], - [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'], - [/\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'], - [/(pe)(?:rson|ople)$/i, '$1ople'], - [/(child)(?:ren)?$/i, '$1ren'], - [/eaux$/i, '$0'], - [/m[ae]n$/i, 'men'], - ['thou', 'you'] - ].forEach(function (rule) { - return pluralize.addPluralRule(rule[0], rule[1]); - }); - - /** - * Singularization rules. - */ - [ - [/s$/i, ''], - [/(ss)$/i, '$1'], - [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'], - [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'], - [/ies$/i, 'y'], - [/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'], - [/\b(mon|smil)ies$/i, '$1ey'], - [/\b((?:tit)?m|l)ice$/i, '$1ouse'], - [/(seraph|cherub)im$/i, '$1'], - [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'], - [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'], - [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'], - [/(test)(?:is|es)$/i, '$1is'], - [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'], - [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'], - [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'], - [/(alumn|alg|vertebr)ae$/i, '$1a'], - [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'], - [/(matr|append)ices$/i, '$1ix'], - [/(pe)(rson|ople)$/i, '$1rson'], - [/(child)ren$/i, '$1'], - [/(eau)x?$/i, '$1'], - [/men$/i, 'man'] - ].forEach(function (rule) { - return pluralize.addSingularRule(rule[0], rule[1]); - }); - - /** - * Uncountable rules. + * Uncountable rules. */ [ // Singular words with no plurals. @@ -45779,8363 +45202,1700 @@ var pluralize = createCommonjsModule(function (module, exports) { 'rice', 'salmon', 'scissors', - 'series', - 'sewage', - 'shambles', - 'shrimp', - 'software', - 'species', - 'staff', - 'swine', - 'tennis', - 'traffic', - 'transportation', - 'trout', - 'tuna', - 'wealth', - 'welfare', - 'whiting', - 'wildebeest', - 'wildlife', - 'you', - /pok[eé]mon$/i, - // Regexes. - /[^aeiou]ese$/i, // "chinese", "japanese" - /deer$/i, // "deer", "reindeer" - /fish$/i, // "fish", "blowfish", "angelfish" - /measles$/i, - /o[iu]s$/i, // "carnivorous" - /pox$/i, // "chickpox", "smallpox" - /sheep$/i - ].forEach(pluralize.addUncountableRule); - - return pluralize; -}); -}); - -var convert_1$3 = convert$6; - -function convert$6(test) { - if (typeof test === 'string') { - return typeFactory$3(test) - } - - if (test === null || test === undefined) { - return ok$4 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$3 : matchesFactory$3)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$3(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$6(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$3(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$3(tests) { - var checks = convertAll$3(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$3(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$4() { - return true -} - -var unistUtilVisitParents$3 = visitParents$3; - - - -var CONTINUE$6 = true; -var SKIP$6 = 'skip'; -var EXIT$6 = false; - -visitParents$3.CONTINUE = CONTINUE$6; -visitParents$3.SKIP = SKIP$6; -visitParents$3.EXIT = EXIT$6; - -function visitParents$3(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$3(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$3(visitor(node, parents)); - - if (result[0] === EXIT$6) { - return result - } - } - - if (node.children && result[0] !== SKIP$6) { - subresult = toResult$3(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$6 ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$6) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$3(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$6, value] - } - - return [value] -} - -var unistUtilVisit$3 = visit$3; - - - -var CONTINUE$7 = unistUtilVisitParents$3.CONTINUE; -var SKIP$7 = unistUtilVisitParents$3.SKIP; -var EXIT$7 = unistUtilVisitParents$3.EXIT; - -visit$3.CONTINUE = CONTINUE$7; -visit$3.SKIP = SKIP$7; -visit$3.EXIT = EXIT$7; - -function visit$3(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$3(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var start$1 = factory$a('start'); -var end = factory$a('end'); - -var unistUtilPosition = position$1; - -position$1.start = start$1; -position$1.end = end; - -function position$1(node) { - return {start: start$1(node), end: end(node)} -} - -function factory$a(type) { - point.displayName = type; - - return point - - function point(node) { - var point = (node && node.position && node.position[type]) || {}; - - return { - line: point.line || null, - column: point.column || null, - offset: isNaN(point.offset) ? null : point.offset - } - } -} - -var unistUtilGenerated = generated; - -function generated(node) { - var position = optional(optional(node).position); - var start = optional(position.start); - var end = optional(position.end); - - return !start.line || !start.column || !end.line || !end.column -} - -function optional(value) { - return value && typeof value === 'object' ? value : {} -} - -var remarkLintListItemBulletIndent = unifiedLintRule( - 'remark-lint:list-item-bullet-indent', - listItemBulletIndent -); - -var start$2 = unistUtilPosition.start; - -function listItemBulletIndent(tree, file) { - var contents = String(file); - - unistUtilVisit$3(tree, 'list', visitor); - - function visitor(node) { - node.children.forEach(visitItems); - } - - function visitItems(item) { - var final; - var indent; - var reason; - - if (!unistUtilGenerated(item)) { - final = start$2(item.children[0]); - indent = contents.slice(start$2(item).offset, final.offset).match(/^\s*/)[0] - .length; - - if (indent !== 0) { - reason = - 'Incorrect indentation before bullet: remove ' + - indent + - ' ' + - pluralize('space', indent); - - file.message(reason, { - line: final.line, - column: final.column - indent - }); - } - } - } -} - -var convert_1$4 = convert$7; - -function convert$7(test) { - if (typeof test === 'string') { - return typeFactory$4(test) - } - - if (test === null || test === undefined) { - return ok$5 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$4 : matchesFactory$4)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$4(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$7(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$4(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$4(tests) { - var checks = convertAll$4(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$4(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$5() { - return true -} - -var unistUtilVisitParents$4 = visitParents$4; - - - -var CONTINUE$8 = true; -var SKIP$8 = 'skip'; -var EXIT$8 = false; - -visitParents$4.CONTINUE = CONTINUE$8; -visitParents$4.SKIP = SKIP$8; -visitParents$4.EXIT = EXIT$8; - -function visitParents$4(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$4(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$4(visitor(node, parents)); - - if (result[0] === EXIT$8) { - return result - } - } - - if (node.children && result[0] !== SKIP$8) { - subresult = toResult$4(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$8 ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$8) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$4(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$8, value] - } - - return [value] -} - -var unistUtilVisit$4 = visit$4; - - - -var CONTINUE$9 = unistUtilVisitParents$4.CONTINUE; -var SKIP$9 = unistUtilVisitParents$4.SKIP; -var EXIT$9 = unistUtilVisitParents$4.EXIT; - -visit$4.CONTINUE = CONTINUE$9; -visit$4.SKIP = SKIP$9; -visit$4.EXIT = EXIT$9; - -function visit$4(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$4(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintListItemIndent = unifiedLintRule('remark-lint:list-item-indent', listItemIndent); - -var start$3 = unistUtilPosition.start; - -var styles$1 = {'tab-size': true, mixed: true, space: true}; - -function listItemIndent(tree, file, option) { - var contents = String(file); - var preferred = typeof option === 'string' ? option : 'tab-size'; - - if (styles$1[preferred] !== true) { - file.fail( - 'Incorrect list-item indent style `' + - preferred + - "`: use either `'tab-size'`, `'space'`, or `'mixed'`" - ); - } - - unistUtilVisit$4(tree, 'list', visitor); - - function visitor(node) { - var spread = node.spread || node.loose; - - if (!unistUtilGenerated(node)) { - node.children.forEach(visitItem); - } - - function visitItem(item) { - var head = item.children[0]; - var final = start$3(head); - var marker; - var bulletSize; - var style; - var diff; - var reason; - var abs; - - marker = contents - .slice(start$3(item).offset, final.offset) - .replace(/\[[x ]?]\s*$/i, ''); - - bulletSize = marker.replace(/\s+$/, '').length; - - style = - preferred === 'tab-size' || (preferred === 'mixed' && spread) - ? Math.ceil(bulletSize / 4) * 4 - : bulletSize + 1; - - if (marker.length !== style) { - diff = style - marker.length; - abs = Math.abs(diff); - - reason = - 'Incorrect list-item indent: ' + - (diff > 0 ? 'add' : 'remove') + - ' ' + - abs + - ' ' + - pluralize('space', abs); - - file.message(reason, final); - } - } - } -} - -var convert_1$5 = convert$8; - -function convert$8(test) { - if (typeof test === 'string') { - return typeFactory$5(test) - } - - if (test === null || test === undefined) { - return ok$6 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$5 : matchesFactory$5)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$5(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$8(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$5(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$5(tests) { - var checks = convertAll$5(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$5(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$6() { - return true -} - -var unistUtilVisitParents$5 = visitParents$5; - - - -var CONTINUE$a = true; -var SKIP$a = 'skip'; -var EXIT$a = false; - -visitParents$5.CONTINUE = CONTINUE$a; -visitParents$5.SKIP = SKIP$a; -visitParents$5.EXIT = EXIT$a; - -function visitParents$5(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$5(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$5(visitor(node, parents)); - - if (result[0] === EXIT$a) { - return result - } - } - - if (node.children && result[0] !== SKIP$a) { - subresult = toResult$5(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$a ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$a) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$5(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$a, value] - } - - return [value] -} - -var unistUtilVisit$5 = visit$5; - - - -var CONTINUE$b = unistUtilVisitParents$5.CONTINUE; -var SKIP$b = unistUtilVisitParents$5.SKIP; -var EXIT$b = unistUtilVisitParents$5.EXIT; - -visit$5.CONTINUE = CONTINUE$b; -visit$5.SKIP = SKIP$b; -visit$5.EXIT = EXIT$b; - -function visit$5(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$5(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var mdastUtilToString = toString$3; - -// Get the text content of a node. -// Prefer the node’s plain-text fields, otherwise serialize its children, -// and if the given value is an array, serialize the nodes in it. -function toString$3(node) { - return ( - (node && - (node.value || - node.alt || - node.title || - ('children' in node && all$1(node.children)) || - ('length' in node && all$1(node)))) || - '' - ) -} - -function all$1(values) { - var result = []; - var length = values.length; - var index = -1; - - while (++index < length) { - result[index] = toString$3(values[index]); - } - - return result.join('') -} - -var remarkLintNoAutoLinkWithoutProtocol = unifiedLintRule( - 'remark-lint:no-auto-link-without-protocol', - noAutoLinkWithoutProtocol -); - -var start$4 = unistUtilPosition.start; -var end$1 = unistUtilPosition.end; - -// Protocol expression. -// See: . -var protocol$2 = /^[a-z][a-z+.-]+:\/?/i; - -var reason = 'All automatic links must start with a protocol'; - -function noAutoLinkWithoutProtocol(tree, file) { - unistUtilVisit$5(tree, 'link', visitor); - - function visitor(node) { - var children; - - if (!unistUtilGenerated(node)) { - children = node.children; - - if ( - start$4(node).column === start$4(children[0]).column - 1 && - end$1(node).column === end$1(children[children.length - 1]).column + 1 && - !protocol$2.test(mdastUtilToString(node)) - ) { - file.message(reason, node); - } - } - } -} - -var vfileLocation$3 = factory$b; - -function factory$b(file) { - var contents = indices$3(String(file)); - - return { - toPosition: offsetToPositionFactory$3(contents), - toOffset: positionToOffsetFactory$3(contents) - } -} - -// Factory to get the line and column-based `position` for `offset` in the bound -// indices. -function offsetToPositionFactory$3(indices) { - return offsetToPosition - - // Get the line and column-based `position` for `offset` in the bound indices. - function offsetToPosition(offset) { - var index = -1; - var length = indices.length; - - if (offset < 0) { - return {} - } - - while (++index < length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } - } - - return {} - } -} - -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$3(indices) { - return positionToOffset - - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; - - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 - } - - return -1 - } -} - -// Get indices of line-breaks in `value`. -function indices$3(value) { - var result = []; - var index = value.indexOf('\n'); - - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); - } - - result.push(value.length + 1); - - return result -} - -var convert_1$6 = convert$9; - -function convert$9(test) { - if (typeof test === 'string') { - return typeFactory$6(test) - } - - if (test === null || test === undefined) { - return ok$7 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$6 : matchesFactory$6)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$6(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$9(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$6(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$6(tests) { - var checks = convertAll$6(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$6(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$7() { - return true -} - -var unistUtilVisitParents$6 = visitParents$6; - - - -var CONTINUE$c = true; -var SKIP$c = 'skip'; -var EXIT$c = false; - -visitParents$6.CONTINUE = CONTINUE$c; -visitParents$6.SKIP = SKIP$c; -visitParents$6.EXIT = EXIT$c; - -function visitParents$6(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$6(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$6(visitor(node, parents)); - - if (result[0] === EXIT$c) { - return result - } - } - - if (node.children && result[0] !== SKIP$c) { - subresult = toResult$6(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$c ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$c) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$6(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$c, value] - } - - return [value] -} - -var unistUtilVisit$6 = visit$6; - - - -var CONTINUE$d = unistUtilVisitParents$6.CONTINUE; -var SKIP$d = unistUtilVisitParents$6.SKIP; -var EXIT$d = unistUtilVisitParents$6.EXIT; - -visit$6.CONTINUE = CONTINUE$d; -visit$6.SKIP = SKIP$d; -visit$6.EXIT = EXIT$d; - -function visit$6(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$6(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoBlockquoteWithoutMarker = unifiedLintRule( - 'remark-lint:no-blockquote-without-marker', - noBlockquoteWithoutMarker -); - -var reason$1 = 'Missing marker in block quote'; - -function noBlockquoteWithoutMarker(tree, file) { - var contents = String(file); - var location = vfileLocation$3(file); - var last = contents.length; - - unistUtilVisit$6(tree, 'blockquote', visitor); - - function visitor(node) { - var indent = node.position && node.position.indent; - var start; - var length; - var index; - var line; - var offset; - var character; - var pos; - - if (unistUtilGenerated(node) || !indent || indent.length === 0) { - return - } - - start = unistUtilPosition.start(node).line; - length = indent.length; - index = -1; - - while (++index < length) { - line = start + index + 1; - pos = {line: line, column: indent[index]}; - offset = location.toOffset(pos) - 1; - - while (++offset < last) { - character = contents.charAt(offset); - - if (character === '>') { - break - } - - /* istanbul ignore else - just for safety */ - if (character !== ' ' && character !== '\t') { - file.message(reason$1, pos); - break - } - } - } - } -} - -var convert_1$7 = convert$a; - -function convert$a(test) { - if (typeof test === 'string') { - return typeFactory$7(test) - } - - if (test === null || test === undefined) { - return ok$8 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$7 : matchesFactory$7)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$7(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$a(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$7(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$7(tests) { - var checks = convertAll$7(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$7(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$8() { - return true -} - -var unistUtilVisitParents$7 = visitParents$7; - - - -var CONTINUE$e = true; -var SKIP$e = 'skip'; -var EXIT$e = false; - -visitParents$7.CONTINUE = CONTINUE$e; -visitParents$7.SKIP = SKIP$e; -visitParents$7.EXIT = EXIT$e; - -function visitParents$7(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$7(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$7(visitor(node, parents)); - - if (result[0] === EXIT$e) { - return result - } - } - - if (node.children && result[0] !== SKIP$e) { - subresult = toResult$7(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$e ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$e) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$7(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$e, value] - } - - return [value] -} - -var unistUtilVisit$7 = visit$7; - - - -var CONTINUE$f = unistUtilVisitParents$7.CONTINUE; -var SKIP$f = unistUtilVisitParents$7.SKIP; -var EXIT$f = unistUtilVisitParents$7.EXIT; - -visit$7.CONTINUE = CONTINUE$f; -visit$7.SKIP = SKIP$f; -visit$7.EXIT = EXIT$f; - -function visit$7(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$7(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoLiteralUrls = unifiedLintRule('remark-lint:no-literal-urls', noLiteralURLs); - -var start$5 = unistUtilPosition.start; -var end$2 = unistUtilPosition.end; -var mailto$2 = 'mailto:'; -var reason$2 = 'Don’t use literal URLs without angle brackets'; - -function noLiteralURLs(tree, file) { - unistUtilVisit$7(tree, 'link', visitor); - - function visitor(node) { - var children = node.children; - var value = mdastUtilToString(node); - - if ( - !unistUtilGenerated(node) && - start$5(node).column === start$5(children[0]).column && - end$2(node).column === end$2(children[children.length - 1]).column && - (node.url === mailto$2 + value || node.url === value) - ) { - file.message(reason$2, node); - } - } -} - -var convert_1$8 = convert$b; - -function convert$b(test) { - if (typeof test === 'string') { - return typeFactory$8(test) - } - - if (test === null || test === undefined) { - return ok$9 - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$8 : matchesFactory$8)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$8(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$b(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$8(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$8(tests) { - var checks = convertAll$8(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$8(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$9() { - return true -} - -var unistUtilVisitParents$8 = visitParents$8; - - - -var CONTINUE$g = true; -var SKIP$g = 'skip'; -var EXIT$g = false; - -visitParents$8.CONTINUE = CONTINUE$g; -visitParents$8.SKIP = SKIP$g; -visitParents$8.EXIT = EXIT$g; - -function visitParents$8(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$8(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$8(visitor(node, parents)); - - if (result[0] === EXIT$g) { - return result - } - } - - if (node.children && result[0] !== SKIP$g) { - subresult = toResult$8(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$g ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$g) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$8(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$g, value] - } - - return [value] -} - -var unistUtilVisit$8 = visit$8; - - - -var CONTINUE$h = unistUtilVisitParents$8.CONTINUE; -var SKIP$h = unistUtilVisitParents$8.SKIP; -var EXIT$h = unistUtilVisitParents$8.EXIT; - -visit$8.CONTINUE = CONTINUE$h; -visit$8.SKIP = SKIP$h; -visit$8.EXIT = EXIT$h; - -function visit$8(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$8(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintOrderedListMarkerStyle = unifiedLintRule( - 'remark-lint:ordered-list-marker-style', - orderedListMarkerStyle -); - -var start$6 = unistUtilPosition.start; - -var styles$2 = { - ')': true, - '.': true, - null: true -}; - -function orderedListMarkerStyle(tree, file, option) { - var contents = String(file); - var preferred = - typeof option !== 'string' || option === 'consistent' ? null : option; - - if (styles$2[preferred] !== true) { - file.fail( - 'Incorrect ordered list item marker style `' + - preferred + - "`: use either `'.'` or `')'`" - ); - } - - unistUtilVisit$8(tree, 'list', visitor); - - function visitor(node) { - var children = node.children; - var length = node.ordered ? children.length : 0; - var index = -1; - var marker; - var child; - - while (++index < length) { - child = children[index]; - - if (!unistUtilGenerated(child)) { - marker = contents - .slice(start$6(child).offset, start$6(child.children[0]).offset) - .replace(/\s|\d/g, '') - .replace(/\[[x ]?]\s*$/i, ''); - - if (preferred) { - if (marker !== preferred) { - file.message('Marker style should be `' + preferred + '`', child); - } - } else { - preferred = marker; - } - } - } - } -} - -var convert_1$9 = convert$c; - -function convert$c(test) { - if (typeof test === 'string') { - return typeFactory$9(test) - } - - if (test === null || test === undefined) { - return ok$a - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$9 : matchesFactory$9)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$9(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$c(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$9(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$9(tests) { - var checks = convertAll$9(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$9(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$a() { - return true -} - -var unistUtilVisitParents$9 = visitParents$9; - - - -var CONTINUE$i = true; -var SKIP$i = 'skip'; -var EXIT$i = false; - -visitParents$9.CONTINUE = CONTINUE$i; -visitParents$9.SKIP = SKIP$i; -visitParents$9.EXIT = EXIT$i; - -function visitParents$9(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$9(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$9(visitor(node, parents)); - - if (result[0] === EXIT$i) { - return result - } - } - - if (node.children && result[0] !== SKIP$i) { - subresult = toResult$9(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$i ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$i) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$9(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$i, value] - } - - return [value] -} - -var unistUtilVisit$9 = visit$9; - - - -var CONTINUE$j = unistUtilVisitParents$9.CONTINUE; -var SKIP$j = unistUtilVisitParents$9.SKIP; -var EXIT$j = unistUtilVisitParents$9.EXIT; - -visit$9.CONTINUE = CONTINUE$j; -visit$9.SKIP = SKIP$j; -visit$9.EXIT = EXIT$j; - -function visit$9(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$9(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintHardBreakSpaces = unifiedLintRule('remark-lint:hard-break-spaces', hardBreakSpaces); - -var reason$3 = 'Use two spaces for hard line breaks'; - -function hardBreakSpaces(tree, file) { - var contents = String(file); - - unistUtilVisit$9(tree, 'break', visitor); - - function visitor(node) { - var value; - - if (!unistUtilGenerated(node)) { - value = contents - .slice(unistUtilPosition.start(node).offset, unistUtilPosition.end(node).offset) - .split('\n', 1)[0] - .replace(/\r$/, ''); - - if (value.length > 2) { - file.message(reason$3, node); - } - } - } -} - -var convert_1$a = convert$d; - -function convert$d(test) { - if (typeof test === 'string') { - return typeFactory$a(test) - } - - if (test === null || test === undefined) { - return ok$b - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$a : matchesFactory$a)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$a(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$d(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$a(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$a(tests) { - var checks = convertAll$a(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$a(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$b() { - return true -} - -var unistUtilVisitParents$a = visitParents$a; - - - -var CONTINUE$k = true; -var SKIP$k = 'skip'; -var EXIT$k = false; - -visitParents$a.CONTINUE = CONTINUE$k; -visitParents$a.SKIP = SKIP$k; -visitParents$a.EXIT = EXIT$k; - -function visitParents$a(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$a(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$a(visitor(node, parents)); - - if (result[0] === EXIT$k) { - return result - } - } - - if (node.children && result[0] !== SKIP$k) { - subresult = toResult$a(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$k ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$k) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$a(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$k, value] - } - - return [value] -} - -var unistUtilVisit$a = visit$a; - - - -var CONTINUE$l = unistUtilVisitParents$a.CONTINUE; -var SKIP$l = unistUtilVisitParents$a.SKIP; -var EXIT$l = unistUtilVisitParents$a.EXIT; - -visit$a.CONTINUE = CONTINUE$l; -visit$a.SKIP = SKIP$l; -visit$a.EXIT = EXIT$l; - -function visit$a(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$a(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoDuplicateDefinitions = unifiedLintRule( - 'remark-lint:no-duplicate-definitions', - noDuplicateDefinitions -); - -var reason$4 = 'Do not use definitions with the same identifier'; - -function noDuplicateDefinitions(tree, file) { - var map = {}; - - unistUtilVisit$a(tree, ['definition', 'footnoteDefinition'], check); - - function check(node) { - var identifier; - var duplicate; - - if (!unistUtilGenerated(node)) { - identifier = node.identifier; - duplicate = map[identifier]; - - if (duplicate && duplicate.type) { - file.message( - reason$4 + ' (' + unistUtilStringifyPosition(unistUtilPosition.start(duplicate)) + ')', - node - ); - } - - map[identifier] = node; - } - } -} - -var convert_1$b = convert$e; - -function convert$e(test) { - if (typeof test === 'string') { - return typeFactory$b(test) - } - - if (test === null || test === undefined) { - return ok$c - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$b : matchesFactory$b)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$b(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$e(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$b(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$b(tests) { - var checks = convertAll$b(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$b(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$c() { - return true -} - -var unistUtilVisitParents$b = visitParents$b; - - - -var CONTINUE$m = true; -var SKIP$m = 'skip'; -var EXIT$m = false; - -visitParents$b.CONTINUE = CONTINUE$m; -visitParents$b.SKIP = SKIP$m; -visitParents$b.EXIT = EXIT$m; - -function visitParents$b(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$b(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$b(visitor(node, parents)); - - if (result[0] === EXIT$m) { - return result - } - } - - if (node.children && result[0] !== SKIP$m) { - subresult = toResult$b(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$m ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$m) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$b(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$m, value] - } - - return [value] -} - -var unistUtilVisit$b = visit$b; - - - -var CONTINUE$n = unistUtilVisitParents$b.CONTINUE; -var SKIP$n = unistUtilVisitParents$b.SKIP; -var EXIT$n = unistUtilVisitParents$b.EXIT; - -visit$b.CONTINUE = CONTINUE$n; -visit$b.SKIP = SKIP$n; -visit$b.EXIT = EXIT$n; - -function visit$b(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$b(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var mdastUtilHeadingStyle = style; - -function style(node, relative) { - var last = node.children[node.children.length - 1]; - var depth = node.depth; - var pos = node && node.position && node.position.end; - var final = last && last.position && last.position.end; - - if (!pos) { - return null - } - - // This can only occur for `'atx'` and `'atx-closed'` headings. - // This might incorrectly match `'atx'` headings with lots of trailing white - // space as an `'atx-closed'` heading. - if (!last) { - if (pos.column - 1 <= depth * 2) { - return consolidate(depth, relative) - } - - return 'atx-closed' - } - - if (final.line + 1 === pos.line) { - return 'setext' - } - - if (final.column + depth < pos.column) { - return 'atx-closed' - } - - return consolidate(depth, relative) -} - -// Get the probable style of an atx-heading, depending on preferred style. -function consolidate(depth, relative) { - return depth < 3 - ? 'atx' - : relative === 'atx' || relative === 'setext' - ? relative - : null -} - -var remarkLintNoHeadingContentIndent = unifiedLintRule( - 'remark-lint:no-heading-content-indent', - noHeadingContentIndent -); - -var start$7 = unistUtilPosition.start; -var end$3 = unistUtilPosition.end; - -function noHeadingContentIndent(tree, file) { - var contents = String(file); - - unistUtilVisit$b(tree, 'heading', visitor); - - function visitor(node) { - var depth; - var children; - var type; - var head; - var initial; - var final; - var diff; - var index; - var char; - var reason; - var abs; - - if (unistUtilGenerated(node)) { - return - } - - depth = node.depth; - children = node.children; - type = mdastUtilHeadingStyle(node, 'atx'); - - if (type === 'atx' || type === 'atx-closed') { - initial = start$7(node); - index = initial.offset; - char = contents.charAt(index); - - while (char && char !== '#') { - char = contents.charAt(++index); - } - - /* istanbul ignore if - CR/LF bug: remarkjs/remark#195. */ - if (!char) { - return - } - - index = depth + (index - initial.offset); - head = start$7(children[0]).column; - - // Ignore empty headings. - if (!head) { - return - } - - diff = head - initial.column - 1 - index; - - if (diff) { - abs = Math.abs(diff); - - reason = - (diff > 0 ? 'Remove' : 'Add') + - ' ' + - abs + - ' ' + - pluralize('space', abs) + - ' before this heading’s content'; - - file.message(reason, start$7(children[0])); - } - } - - // Closed ATX headings always must have a space between their content and - // the final hashes, thus, there is no `add x spaces`. - if (type === 'atx-closed') { - final = end$3(children[children.length - 1]); - diff = end$3(node).column - final.column - 1 - depth; - - if (diff) { - reason = - 'Remove ' + - diff + - ' ' + - pluralize('space', diff) + - ' after this heading’s content'; - - file.message(reason, final); - } - } - } -} - -var convert_1$c = convert$f; - -function convert$f(test) { - if (typeof test === 'string') { - return typeFactory$c(test) - } - - if (test === null || test === undefined) { - return ok$d - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$c : matchesFactory$c)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$c(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$f(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$c(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$c(tests) { - var checks = convertAll$c(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$c(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$d() { - return true -} - -var unistUtilVisitParents$c = visitParents$c; - - - -var CONTINUE$o = true; -var SKIP$o = 'skip'; -var EXIT$o = false; - -visitParents$c.CONTINUE = CONTINUE$o; -visitParents$c.SKIP = SKIP$o; -visitParents$c.EXIT = EXIT$o; - -function visitParents$c(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$c(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$c(visitor(node, parents)); - - if (result[0] === EXIT$o) { - return result - } - } - - if (node.children && result[0] !== SKIP$o) { - subresult = toResult$c(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$o ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$o) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$c(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$o, value] - } - - return [value] -} - -var unistUtilVisit$c = visit$c; - - - -var CONTINUE$p = unistUtilVisitParents$c.CONTINUE; -var SKIP$p = unistUtilVisitParents$c.SKIP; -var EXIT$p = unistUtilVisitParents$c.EXIT; - -visit$c.CONTINUE = CONTINUE$p; -visit$c.SKIP = SKIP$p; -visit$c.EXIT = EXIT$p; - -function visit$c(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$c(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoInlinePadding = unifiedLintRule('remark-lint:no-inline-padding', noInlinePadding); - -function noInlinePadding(tree, file) { - unistUtilVisit$c(tree, ['emphasis', 'strong', 'delete', 'image', 'link'], visitor); - - function visitor(node) { - var contents; - - if (!unistUtilGenerated(node)) { - contents = mdastUtilToString(node); - - if ( - contents.charAt(0) === ' ' || - contents.charAt(contents.length - 1) === ' ' - ) { - file.message('Don’t pad `' + node.type + '` with inner spaces', node); - } - } - } -} - -var convert_1$d = convert$g; - -function convert$g(test) { - if (typeof test === 'string') { - return typeFactory$d(test) - } - - if (test === null || test === undefined) { - return ok$e - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$d : matchesFactory$d)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$d(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$g(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$d(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$d(tests) { - var checks = convertAll$d(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$d(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$e() { - return true -} - -var unistUtilVisitParents$d = visitParents$d; - - - -var CONTINUE$q = true; -var SKIP$q = 'skip'; -var EXIT$q = false; - -visitParents$d.CONTINUE = CONTINUE$q; -visitParents$d.SKIP = SKIP$q; -visitParents$d.EXIT = EXIT$q; - -function visitParents$d(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$d(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$d(visitor(node, parents)); - - if (result[0] === EXIT$q) { - return result - } - } - - if (node.children && result[0] !== SKIP$q) { - subresult = toResult$d(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$q ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$q) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$d(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$q, value] - } - - return [value] -} - -var unistUtilVisit$d = visit$d; - - - -var CONTINUE$r = unistUtilVisitParents$d.CONTINUE; -var SKIP$r = unistUtilVisitParents$d.SKIP; -var EXIT$r = unistUtilVisitParents$d.EXIT; - -visit$d.CONTINUE = CONTINUE$r; -visit$d.SKIP = SKIP$r; -visit$d.EXIT = EXIT$r; - -function visit$d(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$d(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoShortcutReferenceImage = unifiedLintRule( - 'remark-lint:no-shortcut-reference-image', - noShortcutReferenceImage -); - -var reason$5 = 'Use the trailing [] on reference images'; - -function noShortcutReferenceImage(tree, file) { - unistUtilVisit$d(tree, 'imageReference', visitor); - - function visitor(node) { - if (!unistUtilGenerated(node) && node.referenceType === 'shortcut') { - file.message(reason$5, node); - } - } -} - -var convert_1$e = convert$h; - -function convert$h(test) { - if (typeof test === 'string') { - return typeFactory$e(test) - } - - if (test === null || test === undefined) { - return ok$f - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$e : matchesFactory$e)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$e(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$h(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$e(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$e(tests) { - var checks = convertAll$e(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$e(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$f() { - return true -} - -var unistUtilVisitParents$e = visitParents$e; - - - -var CONTINUE$s = true; -var SKIP$s = 'skip'; -var EXIT$s = false; - -visitParents$e.CONTINUE = CONTINUE$s; -visitParents$e.SKIP = SKIP$s; -visitParents$e.EXIT = EXIT$s; - -function visitParents$e(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$e(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$e(visitor(node, parents)); - - if (result[0] === EXIT$s) { - return result - } - } - - if (node.children && result[0] !== SKIP$s) { - subresult = toResult$e(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$s ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$s) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$e(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$s, value] - } - - return [value] -} - -var unistUtilVisit$e = visit$e; - - - -var CONTINUE$t = unistUtilVisitParents$e.CONTINUE; -var SKIP$t = unistUtilVisitParents$e.SKIP; -var EXIT$t = unistUtilVisitParents$e.EXIT; - -visit$e.CONTINUE = CONTINUE$t; -visit$e.SKIP = SKIP$t; -visit$e.EXIT = EXIT$t; - -function visit$e(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$e(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoShortcutReferenceLink = unifiedLintRule( - 'remark-lint:no-shortcut-reference-link', - noShortcutReferenceLink -); - -var reason$6 = 'Use the trailing `[]` on reference links'; - -function noShortcutReferenceLink(tree, file) { - unistUtilVisit$e(tree, 'linkReference', visitor); - - function visitor(node) { - if (!unistUtilGenerated(node) && node.referenceType === 'shortcut') { - file.message(reason$6, node); - } - } -} - -var convert_1$f = convert$i; - -function convert$i(test) { - if (typeof test === 'string') { - return typeFactory$f(test) - } - - if (test === null || test === undefined) { - return ok$g - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$f : matchesFactory$f)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$f(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$i(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$f(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$f(tests) { - var checks = convertAll$f(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$f(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$g() { - return true -} - -var unistUtilVisitParents$f = visitParents$f; - - - -var CONTINUE$u = true; -var SKIP$u = 'skip'; -var EXIT$u = false; - -visitParents$f.CONTINUE = CONTINUE$u; -visitParents$f.SKIP = SKIP$u; -visitParents$f.EXIT = EXIT$u; - -function visitParents$f(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$f(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$f(visitor(node, parents)); - - if (result[0] === EXIT$u) { - return result - } - } - - if (node.children && result[0] !== SKIP$u) { - subresult = toResult$f(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$u ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$u) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$f(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$u, value] - } - - return [value] -} - -var unistUtilVisit$f = visit$f; - - - -var CONTINUE$v = unistUtilVisitParents$f.CONTINUE; -var SKIP$v = unistUtilVisitParents$f.SKIP; -var EXIT$v = unistUtilVisitParents$f.EXIT; - -visit$f.CONTINUE = CONTINUE$v; -visit$f.SKIP = SKIP$v; -visit$f.EXIT = EXIT$v; - -function visit$f(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$f(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoUndefinedReferences = unifiedLintRule( - 'remark-lint:no-undefined-references', - noUndefinedReferences -); - -var reason$7 = 'Found reference to undefined definition'; - -// The identifier is upcased to avoid naming collisions with fields inherited -// from `Object.prototype`. -// If `Object.create(null)` was used in place of `{}`, downcasing would work -// equally well. -function normalize$3(s) { - return collapseWhiteSpace(s.toUpperCase()) -} - -function noUndefinedReferences(tree, file, option) { - var allow = ((option || {}).allow || []).map(normalize$3); - var map = {}; - - unistUtilVisit$f(tree, ['definition', 'footnoteDefinition'], mark); - unistUtilVisit$f(tree, ['imageReference', 'linkReference', 'footnoteReference'], find); - - function mark(node) { - if (!unistUtilGenerated(node)) { - map[normalize$3(node.identifier)] = true; - } - } - - function find(node) { - if ( - !unistUtilGenerated(node) && - !(normalize$3(node.identifier) in map) && - allow.indexOf(normalize$3(node.identifier)) === -1 - ) { - file.message(reason$7, node); - } - } -} - -var convert_1$g = convert$j; - -function convert$j(test) { - if (typeof test === 'string') { - return typeFactory$g(test) - } - - if (test === null || test === undefined) { - return ok$h - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$g : matchesFactory$g)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$g(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$j(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$g(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$g(tests) { - var checks = convertAll$g(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$g(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$h() { - return true -} - -var unistUtilVisitParents$g = visitParents$g; - - - -var CONTINUE$w = true; -var SKIP$w = 'skip'; -var EXIT$w = false; - -visitParents$g.CONTINUE = CONTINUE$w; -visitParents$g.SKIP = SKIP$w; -visitParents$g.EXIT = EXIT$w; - -function visitParents$g(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$g(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$g(visitor(node, parents)); - - if (result[0] === EXIT$w) { - return result - } - } - - if (node.children && result[0] !== SKIP$w) { - subresult = toResult$g(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$w ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$w) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$g(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$w, value] - } - - return [value] -} - -var unistUtilVisit$g = visit$g; - - - -var CONTINUE$x = unistUtilVisitParents$g.CONTINUE; -var SKIP$x = unistUtilVisitParents$g.SKIP; -var EXIT$x = unistUtilVisitParents$g.EXIT; - -visit$g.CONTINUE = CONTINUE$x; -visit$g.SKIP = SKIP$x; -visit$g.EXIT = EXIT$x; - -function visit$g(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$g(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoUnusedDefinitions = unifiedLintRule('remark-lint:no-unused-definitions', noUnusedDefinitions); - -var reason$8 = 'Found unused definition'; - -function noUnusedDefinitions(tree, file) { - var map = {}; - var identifier; - var entry; - - unistUtilVisit$g(tree, ['definition', 'footnoteDefinition'], find); - unistUtilVisit$g(tree, ['imageReference', 'linkReference', 'footnoteReference'], mark); - - for (identifier in map) { - entry = map[identifier]; - - if (!entry.used) { - file.message(reason$8, entry.node); - } - } - - function find(node) { - if (!unistUtilGenerated(node)) { - map[node.identifier.toUpperCase()] = {node: node, used: false}; - } - } - - function mark(node) { - var info = map[node.identifier.toUpperCase()]; - - if (!unistUtilGenerated(node) && info) { - info.used = true; - } - } -} - -var plugins$1 = [ - remarkLint$1, - // Unix compatibility. - remarkLintFinalNewline, - // Rendering across vendors differs greatly if using other styles. - remarkLintListItemBulletIndent, - [remarkLintListItemIndent, 'tab-size'], - // Differs or unsupported across vendors. - remarkLintNoAutoLinkWithoutProtocol, - remarkLintNoBlockquoteWithoutMarker, - remarkLintNoLiteralUrls, - [remarkLintOrderedListMarkerStyle, '.'], - // Mistakes. - remarkLintHardBreakSpaces, - remarkLintNoDuplicateDefinitions, - remarkLintNoHeadingContentIndent, - remarkLintNoInlinePadding, - remarkLintNoShortcutReferenceImage, - remarkLintNoShortcutReferenceLink, - remarkLintNoUndefinedReferences, - remarkLintNoUnusedDefinitions -]; - -var remarkPresetLintRecommended = { - plugins: plugins$1 -}; - -var convert_1$h = convert$k; - -function convert$k(test) { - if (typeof test === 'string') { - return typeFactory$h(test) - } - - if (test === null || test === undefined) { - return ok$i - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$h : matchesFactory$h)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$h(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$k(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$h(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$h(tests) { - var checks = convertAll$h(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$h(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$i() { - return true -} - -var unistUtilVisitParents$h = visitParents$h; - - - -var CONTINUE$y = true; -var SKIP$y = 'skip'; -var EXIT$y = false; - -visitParents$h.CONTINUE = CONTINUE$y; -visitParents$h.SKIP = SKIP$y; -visitParents$h.EXIT = EXIT$y; - -function visitParents$h(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$h(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$h(visitor(node, parents)); - - if (result[0] === EXIT$y) { - return result - } - } - - if (node.children && result[0] !== SKIP$y) { - subresult = toResult$h(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$y ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$y) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$h(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$y, value] - } - - return [value] -} - -var unistUtilVisit$h = visit$h; - - - -var CONTINUE$z = unistUtilVisitParents$h.CONTINUE; -var SKIP$z = unistUtilVisitParents$h.SKIP; -var EXIT$z = unistUtilVisitParents$h.EXIT; - -visit$h.CONTINUE = CONTINUE$z; -visit$h.SKIP = SKIP$z; -visit$h.EXIT = EXIT$z; - -function visit$h(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$h(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintBlockquoteIndentation = unifiedLintRule( - 'remark-lint:blockquote-indentation', - blockquoteIndentation -); - -function blockquoteIndentation(tree, file, option) { - var preferred = typeof option === 'number' && !isNaN(option) ? option : null; - - unistUtilVisit$h(tree, 'blockquote', visitor); - - function visitor(node) { - var abs; - var diff; - var reason; - - if (unistUtilGenerated(node) || node.children.length === 0) { - return - } - - if (preferred) { - diff = preferred - check$3(node); - - if (diff !== 0) { - abs = Math.abs(diff); - reason = - (diff > 0 ? 'Add' : 'Remove') + - ' ' + - abs + - ' ' + - pluralize('space', abs) + - ' between block quote and content'; - - file.message(reason, unistUtilPosition.start(node.children[0])); - } - } else { - preferred = check$3(node); - } - } -} - -function check$3(node) { - var head = node.children[0]; - var indentation = unistUtilPosition.start(head).column - unistUtilPosition.start(node).column; - var padding = mdastUtilToString(head).match(/^ +/); - - if (padding) { - indentation += padding[0].length; - } - - return indentation -} - -var vfileLocation$4 = factory$c; - -function factory$c(file) { - var contents = indices$4(String(file)); - - return { - toPosition: offsetToPositionFactory$4(contents), - toOffset: positionToOffsetFactory$4(contents) - } -} - -// Factory to get the line and column-based `position` for `offset` in the bound -// indices. -function offsetToPositionFactory$4(indices) { - return offsetToPosition - - // Get the line and column-based `position` for `offset` in the bound indices. - function offsetToPosition(offset) { - var index = -1; - var length = indices.length; - - if (offset < 0) { - return {} - } - - while (++index < length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } - } - - return {} - } -} - -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$4(indices) { - return positionToOffset - - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; - - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 - } - - return -1 - } -} - -// Get indices of line-breaks in `value`. -function indices$4(value) { - var result = []; - var index = value.indexOf('\n'); - - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); - } - - result.push(value.length + 1); - - return result -} - -var convert_1$i = convert$l; - -function convert$l(test) { - if (typeof test === 'string') { - return typeFactory$i(test) - } - - if (test === null || test === undefined) { - return ok$j - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$i : matchesFactory$i)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$i(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$l(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$i(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$i(tests) { - var checks = convertAll$i(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$i(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$j() { - return true -} - -var unistUtilVisitParents$i = visitParents$i; - - - -var CONTINUE$A = true; -var SKIP$A = 'skip'; -var EXIT$A = false; - -visitParents$i.CONTINUE = CONTINUE$A; -visitParents$i.SKIP = SKIP$A; -visitParents$i.EXIT = EXIT$A; - -function visitParents$i(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$i(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$i(visitor(node, parents)); - - if (result[0] === EXIT$A) { - return result - } - } - - if (node.children && result[0] !== SKIP$A) { - subresult = toResult$i(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$A ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$A) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$i(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$A, value] - } - - return [value] -} - -var unistUtilVisit$i = visit$i; - - - -var CONTINUE$B = unistUtilVisitParents$i.CONTINUE; -var SKIP$B = unistUtilVisitParents$i.SKIP; -var EXIT$B = unistUtilVisitParents$i.EXIT; - -visit$i.CONTINUE = CONTINUE$B; -visit$i.SKIP = SKIP$B; -visit$i.EXIT = EXIT$B; - -function visit$i(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$i(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintCheckboxCharacterStyle = unifiedLintRule( - 'remark-lint:checkbox-character-style', - checkboxCharacterStyle -); - -var start$8 = unistUtilPosition.start; -var end$4 = unistUtilPosition.end; - -var checked = {x: true, X: true}; -var unchecked = {' ': true, '\t': true}; -var types$1 = {true: 'checked', false: 'unchecked'}; - -function checkboxCharacterStyle(tree, file, option) { - var contents = String(file); - var location = vfileLocation$4(file); - var preferred = typeof option === 'object' ? option : {}; - - if (preferred.unchecked && unchecked[preferred.unchecked] !== true) { - file.fail( - 'Incorrect unchecked checkbox marker `' + - preferred.unchecked + - "`: use either `'\\t'`, or `' '`" - ); - } - - if (preferred.checked && checked[preferred.checked] !== true) { - file.fail( - 'Incorrect checked checkbox marker `' + - preferred.checked + - "`: use either `'x'`, or `'X'`" - ); - } - - unistUtilVisit$i(tree, 'listItem', visitor); - - function visitor(node) { - var type; - var initial; - var final; - var value; - var style; - var character; - var reason; - - // Exit early for items without checkbox. - if (typeof node.checked !== 'boolean' || unistUtilGenerated(node)) { - return - } - - type = types$1[node.checked]; - initial = start$8(node).offset; - final = (node.children.length === 0 ? end$4(node) : start$8(node.children[0])) - .offset; - - // For a checkbox to be parsed, it must be followed by a whitespace. - value = contents.slice(initial, final).replace(/\s+$/, '').slice(0, -1); - - // The checkbox character is behind a square bracket. - character = value.charAt(value.length - 1); - style = preferred[type]; - - if (style) { - if (character !== style) { - reason = - type.charAt(0).toUpperCase() + - type.slice(1) + - ' checkboxes should use `' + - style + - '` as a marker'; - - file.message(reason, { - start: location.toPosition(initial + value.length - 1), - end: location.toPosition(initial + value.length) - }); - } - } else { - preferred[type] = character; - } - } -} - -var vfileLocation$5 = factory$d; - -function factory$d(file) { - var contents = indices$5(String(file)); - - return { - toPosition: offsetToPositionFactory$5(contents), - toOffset: positionToOffsetFactory$5(contents) - } -} - -// Factory to get the line and column-based `position` for `offset` in the bound -// indices. -function offsetToPositionFactory$5(indices) { - return offsetToPosition - - // Get the line and column-based `position` for `offset` in the bound indices. - function offsetToPosition(offset) { - var index = -1; - var length = indices.length; - - if (offset < 0) { - return {} - } - - while (++index < length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } - } - - return {} - } -} - -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$5(indices) { - return positionToOffset - - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; - - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 - } - - return -1 - } -} - -// Get indices of line-breaks in `value`. -function indices$5(value) { - var result = []; - var index = value.indexOf('\n'); - - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); - } - - result.push(value.length + 1); - - return result -} - -var convert_1$j = convert$m; - -function convert$m(test) { - if (typeof test === 'string') { - return typeFactory$j(test) - } - - if (test === null || test === undefined) { - return ok$k - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$j : matchesFactory$j)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$j(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$m(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$j(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$j(tests) { - var checks = convertAll$j(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$j(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$k() { - return true -} - -var unistUtilVisitParents$j = visitParents$j; - - - -var CONTINUE$C = true; -var SKIP$C = 'skip'; -var EXIT$C = false; - -visitParents$j.CONTINUE = CONTINUE$C; -visitParents$j.SKIP = SKIP$C; -visitParents$j.EXIT = EXIT$C; - -function visitParents$j(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$j(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$j(visitor(node, parents)); - - if (result[0] === EXIT$C) { - return result - } - } - - if (node.children && result[0] !== SKIP$C) { - subresult = toResult$j(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$C ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$C) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$j(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$C, value] - } - - return [value] -} - -var unistUtilVisit$j = visit$j; - - - -var CONTINUE$D = unistUtilVisitParents$j.CONTINUE; -var SKIP$D = unistUtilVisitParents$j.SKIP; -var EXIT$D = unistUtilVisitParents$j.EXIT; - -visit$j.CONTINUE = CONTINUE$D; -visit$j.SKIP = SKIP$D; -visit$j.EXIT = EXIT$D; - -function visit$j(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$j(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintCheckboxContentIndent = unifiedLintRule( - 'remark-lint:checkbox-content-indent', - checkboxContentIndent -); - -var start$9 = unistUtilPosition.start; -var end$5 = unistUtilPosition.end; - -var reason$9 = 'Checkboxes should be followed by a single character'; - -function checkboxContentIndent(tree, file) { - var contents = String(file); - var location = vfileLocation$5(file); - - unistUtilVisit$j(tree, 'listItem', visitor); - - function visitor(node) { - var initial; - var final; - var value; - - // Exit early for items without checkbox. - if (typeof node.checked !== 'boolean' || unistUtilGenerated(node)) { - return - } - - initial = start$9(node).offset; - /* istanbul ignore next - hard to test, couldn’t find a case. */ - final = (node.children.length === 0 ? end$5(node) : start$9(node.children[0])) - .offset; - - while (/[^\S\n]/.test(contents.charAt(final))) { - final++; - } - - // For a checkbox to be parsed, it must be followed by a whitespace. - value = contents.slice(initial, final); - value = value.slice(value.indexOf(']') + 1); - - if (value.length !== 1) { - file.message(reason$9, { - start: location.toPosition(final - value.length + 1), - end: location.toPosition(final) - }); - } - } -} - -var convert_1$k = convert$n; - -function convert$n(test) { - if (typeof test === 'string') { - return typeFactory$k(test) - } - - if (test === null || test === undefined) { - return ok$l - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$k : matchesFactory$k)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$k(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$n(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$k(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$k(tests) { - var checks = convertAll$k(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$k(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$l() { - return true -} - -var unistUtilVisitParents$k = visitParents$k; - - - -var CONTINUE$E = true; -var SKIP$E = 'skip'; -var EXIT$E = false; - -visitParents$k.CONTINUE = CONTINUE$E; -visitParents$k.SKIP = SKIP$E; -visitParents$k.EXIT = EXIT$E; - -function visitParents$k(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$k(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$k(visitor(node, parents)); - - if (result[0] === EXIT$E) { - return result - } - } - - if (node.children && result[0] !== SKIP$E) { - subresult = toResult$k(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$E ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$E) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$k(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$E, value] - } - - return [value] -} - -var unistUtilVisit$k = visit$k; - - - -var CONTINUE$F = unistUtilVisitParents$k.CONTINUE; -var SKIP$F = unistUtilVisitParents$k.SKIP; -var EXIT$F = unistUtilVisitParents$k.EXIT; - -visit$k.CONTINUE = CONTINUE$F; -visit$k.SKIP = SKIP$F; -visit$k.EXIT = EXIT$F; - -function visit$k(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$k(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintCodeBlockStyle = unifiedLintRule('remark-lint:code-block-style', codeBlockStyle); - -var start$a = unistUtilPosition.start; -var end$6 = unistUtilPosition.end; - -var styles$3 = {null: true, fenced: true, indented: true}; - -function codeBlockStyle(tree, file, option) { - var contents = String(file); - var preferred = - typeof option === 'string' && option !== 'consistent' ? option : null; - - if (styles$3[preferred] !== true) { - file.fail( - 'Incorrect code block style `' + - preferred + - "`: use either `'consistent'`, `'fenced'`, or `'indented'`" - ); - } - - unistUtilVisit$k(tree, 'code', visitor); - - function visitor(node) { - var initial; - var final; - var current; - - if (unistUtilGenerated(node)) { - return null - } - - initial = start$a(node).offset; - final = end$6(node).offset; - - current = - node.lang || /^\s*([~`])\1{2,}/.test(contents.slice(initial, final)) - ? 'fenced' - : 'indented'; - - if (preferred) { - if (preferred !== current) { - file.message('Code blocks should be ' + preferred, node); - } - } else { - preferred = current; - } - } -} - -var convert_1$l = convert$o; - -function convert$o(test) { - if (typeof test === 'string') { - return typeFactory$l(test) - } - - if (test === null || test === undefined) { - return ok$m - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$l : matchesFactory$l)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$l(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$o(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$l(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$l(tests) { - var checks = convertAll$l(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$l(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$m() { - return true -} - -var unistUtilVisitParents$l = visitParents$l; - - - -var CONTINUE$G = true; -var SKIP$G = 'skip'; -var EXIT$G = false; - -visitParents$l.CONTINUE = CONTINUE$G; -visitParents$l.SKIP = SKIP$G; -visitParents$l.EXIT = EXIT$G; - -function visitParents$l(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$l(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$l(visitor(node, parents)); - - if (result[0] === EXIT$G) { - return result - } - } - - if (node.children && result[0] !== SKIP$G) { - subresult = toResult$l(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$G ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$G) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$l(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$G, value] - } - - return [value] -} - -var unistUtilVisit$l = visit$l; - - - -var CONTINUE$H = unistUtilVisitParents$l.CONTINUE; -var SKIP$H = unistUtilVisitParents$l.SKIP; -var EXIT$H = unistUtilVisitParents$l.EXIT; - -visit$l.CONTINUE = CONTINUE$H; -visit$l.SKIP = SKIP$H; -visit$l.EXIT = EXIT$H; - -function visit$l(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$l(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintDefinitionSpacing = unifiedLintRule('remark-lint:definition-spacing', definitionSpacing); - -var label$1 = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/; -var reason$a = 'Do not use consecutive whitespace in definition labels'; - -function definitionSpacing(tree, file) { - var contents = String(file); - - unistUtilVisit$l(tree, ['definition', 'footnoteDefinition'], check); - - function check(node) { - var start = unistUtilPosition.start(node).offset; - var end = unistUtilPosition.end(node).offset; - - if ( - !unistUtilGenerated(node) && - /[ \t\n]{2,}/.test(contents.slice(start, end).match(label$1)[1]) - ) { - file.message(reason$a, node); - } - } -} - -var convert_1$m = convert$p; - -function convert$p(test) { - if (typeof test === 'string') { - return typeFactory$m(test) - } - - if (test === null || test === undefined) { - return ok$n - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$m : matchesFactory$m)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$m(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$p(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$m(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$m(tests) { - var checks = convertAll$m(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$m(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$n() { - return true -} - -var unistUtilVisitParents$m = visitParents$m; - - - -var CONTINUE$I = true; -var SKIP$I = 'skip'; -var EXIT$I = false; - -visitParents$m.CONTINUE = CONTINUE$I; -visitParents$m.SKIP = SKIP$I; -visitParents$m.EXIT = EXIT$I; - -function visitParents$m(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$m(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$m(visitor(node, parents)); - - if (result[0] === EXIT$I) { - return result - } - } - - if (node.children && result[0] !== SKIP$I) { - subresult = toResult$m(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$I ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$I) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$m(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$I, value] - } - - return [value] -} - -var unistUtilVisit$m = visit$m; - - - -var CONTINUE$J = unistUtilVisitParents$m.CONTINUE; -var SKIP$J = unistUtilVisitParents$m.SKIP; -var EXIT$J = unistUtilVisitParents$m.EXIT; - -visit$m.CONTINUE = CONTINUE$J; -visit$m.SKIP = SKIP$J; -visit$m.EXIT = EXIT$J; - -function visit$m(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$m(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintFencedCodeFlag = unifiedLintRule('remark-lint:fenced-code-flag', fencedCodeFlag); - -var start$b = unistUtilPosition.start; -var end$7 = unistUtilPosition.end; - -var fence$2 = /^ {0,3}([~`])\1{2,}/; -var reasonIncorrect = 'Incorrect code language flag'; -var reasonMissing = 'Missing code language flag'; - -function fencedCodeFlag(tree, file, option) { - var contents = String(file); - var allowEmpty = false; - var allowed = []; - var flags = option; - - if (typeof flags === 'object' && !('length' in flags)) { - allowEmpty = Boolean(flags.allowEmpty); - flags = flags.flags; - } - - if (typeof flags === 'object' && 'length' in flags) { - allowed = String(flags).split(','); - } - - unistUtilVisit$m(tree, 'code', visitor); - - function visitor(node) { - var value; - - if (!unistUtilGenerated(node)) { - if (node.lang) { - if (allowed.length !== 0 && allowed.indexOf(node.lang) === -1) { - file.message(reasonIncorrect, node); - } - } else { - value = contents.slice(start$b(node).offset, end$7(node).offset); - - if (!allowEmpty && fence$2.test(value)) { - file.message(reasonMissing, node); - } - } - } - } -} - -var convert_1$n = convert$q; - -function convert$q(test) { - if (typeof test === 'string') { - return typeFactory$n(test) - } - - if (test === null || test === undefined) { - return ok$o - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$n : matchesFactory$n)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$n(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$q(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$n(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$n(tests) { - var checks = convertAll$n(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$n(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$o() { - return true -} - -var unistUtilVisitParents$n = visitParents$n; - - - -var CONTINUE$K = true; -var SKIP$K = 'skip'; -var EXIT$K = false; - -visitParents$n.CONTINUE = CONTINUE$K; -visitParents$n.SKIP = SKIP$K; -visitParents$n.EXIT = EXIT$K; - -function visitParents$n(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$n(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$n(visitor(node, parents)); - - if (result[0] === EXIT$K) { - return result - } - } - - if (node.children && result[0] !== SKIP$K) { - subresult = toResult$n(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$K ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$K) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$n(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$K, value] - } - - return [value] -} - -var unistUtilVisit$n = visit$n; - - - -var CONTINUE$L = unistUtilVisitParents$n.CONTINUE; -var SKIP$L = unistUtilVisitParents$n.SKIP; -var EXIT$L = unistUtilVisitParents$n.EXIT; - -visit$n.CONTINUE = CONTINUE$L; -visit$n.SKIP = SKIP$L; -visit$n.EXIT = EXIT$L; - -function visit$n(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$n(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintFencedCodeMarker = unifiedLintRule('remark-lint:fenced-code-marker', fencedCodeMarker); - -var markers = { - '`': true, - '~': true, - null: true -}; - -function fencedCodeMarker(tree, file, option) { - var contents = String(file); - var preferred = - typeof option === 'string' && option !== 'consistent' ? option : null; - - if (markers[preferred] !== true) { - file.fail( - 'Incorrect fenced code marker `' + - preferred + - "`: use either `'consistent'`, `` '`' ``, or `'~'`" - ); - } - - unistUtilVisit$n(tree, 'code', visitor); - - function visitor(node) { - var start; - var marker; - var label; - - if (!unistUtilGenerated(node)) { - start = unistUtilPosition.start(node).offset; - marker = contents - .slice(start, start + 4) - .replace(/^\s+/, '') - .charAt(0); - - // Ignore unfenced code blocks. - if (markers[marker] === true) { - if (preferred) { - if (marker !== preferred) { - label = preferred === '~' ? preferred : '` ` `'; - file.message( - 'Fenced code should use `' + label + '` as a marker', - node - ); - } - } else { - preferred = marker; - } - } - } - } -} - -var remarkLintFileExtension = unifiedLintRule('remark-lint:file-extension', fileExtension); - -function fileExtension(tree, file, option) { - var ext = file.extname; - var preferred = typeof option === 'string' ? option : 'md'; - - if (ext && ext.slice(1) !== preferred) { - file.message('Incorrect extension: use `' + preferred + '`'); - } -} - -var convert_1$o = convert$r; - -function convert$r(test) { - if (typeof test === 'string') { - return typeFactory$o(test) - } - - if (test === null || test === undefined) { - return ok$p - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$o : matchesFactory$o)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$o(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$r(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$o(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$o(tests) { - var checks = convertAll$o(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$o(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$p() { - return true -} - -var unistUtilVisitParents$o = visitParents$o; - - - -var CONTINUE$M = true; -var SKIP$M = 'skip'; -var EXIT$M = false; - -visitParents$o.CONTINUE = CONTINUE$M; -visitParents$o.SKIP = SKIP$M; -visitParents$o.EXIT = EXIT$M; - -function visitParents$o(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$o(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$o(visitor(node, parents)); - - if (result[0] === EXIT$M) { - return result - } - } - - if (node.children && result[0] !== SKIP$M) { - subresult = toResult$o(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$M ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$M) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$o(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$M, value] - } - - return [value] -} - -var unistUtilVisit$o = visit$o; - - - -var CONTINUE$N = unistUtilVisitParents$o.CONTINUE; -var SKIP$N = unistUtilVisitParents$o.SKIP; -var EXIT$N = unistUtilVisitParents$o.EXIT; - -visit$o.CONTINUE = CONTINUE$N; -visit$o.SKIP = SKIP$N; -visit$o.EXIT = EXIT$N; - -function visit$o(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$o(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintFinalDefinition = unifiedLintRule('remark-lint:final-definition', finalDefinition); - -var start$c = unistUtilPosition.start; - -function finalDefinition(tree, file) { - var last = null; - - unistUtilVisit$o(tree, visitor, true); - - function visitor(node) { - var line = start$c(node).line; - - // Ignore generated nodes. - if (node.type === 'root' || unistUtilGenerated(node)) { - return - } - - if (node.type === 'definition') { - if (last !== null && last > line) { - file.message( - 'Move definitions to the end of the file (after the node at line `' + - last + - '`)', - node - ); - } - } else if (last === null) { - last = line; - } - } -} - -var convert_1$p = convert$s; - -function convert$s(test) { - if (typeof test === 'string') { - return typeFactory$p(test) - } - - if (test === null || test === undefined) { - return ok$q - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$p : matchesFactory$p)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$p(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$s(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$p(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$p(tests) { - var checks = convertAll$p(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$p(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$q() { - return true -} - -var unistUtilVisitParents$p = visitParents$p; - - - -var CONTINUE$O = true; -var SKIP$O = 'skip'; -var EXIT$O = false; - -visitParents$p.CONTINUE = CONTINUE$O; -visitParents$p.SKIP = SKIP$O; -visitParents$p.EXIT = EXIT$O; - -function visitParents$p(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$p(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$p(visitor(node, parents)); - - if (result[0] === EXIT$O) { - return result - } - } - - if (node.children && result[0] !== SKIP$O) { - subresult = toResult$p(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$O ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$O) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$p(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$O, value] - } - - return [value] -} - -var unistUtilVisit$p = visit$p; - - - -var CONTINUE$P = unistUtilVisitParents$p.CONTINUE; -var SKIP$P = unistUtilVisitParents$p.SKIP; -var EXIT$P = unistUtilVisitParents$p.EXIT; - -visit$p.CONTINUE = CONTINUE$P; -visit$p.SKIP = SKIP$P; -visit$p.EXIT = EXIT$P; - -function visit$p(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$p(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintFirstHeadingLevel = unifiedLintRule('remark-lint:first-heading-level', firstHeadingLevel); - -var re$3 = / min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$Q) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$q(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$Q, value] - } - - return [value] -} - -var unistUtilVisit$q = visit$q; - - - -var CONTINUE$R = unistUtilVisitParents$q.CONTINUE; -var SKIP$R = unistUtilVisitParents$q.SKIP; -var EXIT$R = unistUtilVisitParents$q.EXIT; - -visit$q.CONTINUE = CONTINUE$R; -visit$q.SKIP = SKIP$R; -visit$q.EXIT = EXIT$R; - -function visit$q(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$q(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintHeadingStyle = unifiedLintRule('remark-lint:heading-style', headingStyle); - -var types$2 = ['atx', 'atx-closed', 'setext']; - -function headingStyle(tree, file, option) { - var preferred = types$2.indexOf(option) === -1 ? null : option; - - unistUtilVisit$q(tree, 'heading', visitor); - - function visitor(node) { - if (!unistUtilGenerated(node)) { - if (preferred) { - if (mdastUtilHeadingStyle(node, preferred) !== preferred) { - file.message('Headings should use ' + preferred, node); - } - } else { - preferred = mdastUtilHeadingStyle(node, preferred); - } - } - } -} - -var convert_1$r = convert$u; - -function convert$u(test) { - if (typeof test === 'string') { - return typeFactory$r(test) - } - - if (test === null || test === undefined) { - return ok$s - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$r : matchesFactory$r)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$r(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$u(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$r(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$r(tests) { - var checks = convertAll$r(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$r(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$s() { - return true -} - -var unistUtilVisitParents$r = visitParents$r; - - - -var CONTINUE$S = true; -var SKIP$S = 'skip'; -var EXIT$S = false; - -visitParents$r.CONTINUE = CONTINUE$S; -visitParents$r.SKIP = SKIP$S; -visitParents$r.EXIT = EXIT$S; - -function visitParents$r(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$r(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$r(visitor(node, parents)); - - if (result[0] === EXIT$S) { - return result - } - } - - if (node.children && result[0] !== SKIP$S) { - subresult = toResult$r(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$S ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$S) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$r(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$S, value] - } - - return [value] -} - -var unistUtilVisit$r = visit$r; - - - -var CONTINUE$T = unistUtilVisitParents$r.CONTINUE; -var SKIP$T = unistUtilVisitParents$r.SKIP; -var EXIT$T = unistUtilVisitParents$r.EXIT; - -visit$r.CONTINUE = CONTINUE$T; -visit$r.SKIP = SKIP$T; -visit$r.EXIT = EXIT$T; - -function visit$r(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$r(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintMaximumLineLength = unifiedLintRule('remark-lint:maximum-line-length', maximumLineLength); - -var start$d = unistUtilPosition.start; -var end$8 = unistUtilPosition.end; - -function maximumLineLength(tree, file, option) { - var preferred = typeof option === 'number' && !isNaN(option) ? option : 80; - var content = String(file); - var lines = content.split(/\r?\n/); - var length = lines.length; - var index = -1; - var lineLength; - - // Note: JSX is from MDX: . - unistUtilVisit$r(tree, ['heading', 'table', 'code', 'definition', 'html', 'jsx'], ignore); - unistUtilVisit$r(tree, ['link', 'image', 'inlineCode'], inline); - - // Iterate over every line, and warn for violating lines. - while (++index < length) { - lineLength = lines[index].length; - - if (lineLength > preferred) { - file.message('Line must be at most ' + preferred + ' characters', { - line: index + 1, - column: lineLength + 1 - }); - } - } - - // Finally, whitelist some inline spans, but only if they occur at or after - // the wrap. - // However, when they do, and there’s whitespace after it, they are not - // whitelisted. - function inline(node, pos, parent) { - var next = parent.children[pos + 1]; - var initial; - var final; - - /* istanbul ignore if - Nothing to whitelist when generated. */ - if (unistUtilGenerated(node)) { - return - } - - initial = start$d(node); - final = end$8(node); - - // No whitelisting when starting after the border, or ending before it. - if (initial.column > preferred || final.column < preferred) { - return - } - - // No whitelisting when there’s whitespace after the link. - if ( - next && - start$d(next).line === initial.line && - (!next.value || /^(.+?[ \t].+?)/.test(next.value)) - ) { - return - } - - whitelist(initial.line - 1, final.line); - } - - function ignore(node) { - /* istanbul ignore else - Hard to test, as we only run this case on `position: true` */ - if (!unistUtilGenerated(node)) { - whitelist(start$d(node).line - 1, end$8(node).line); - } - } - - // Whitelist from `initial` to `final`, zero-based. - function whitelist(initial, final) { - while (initial < final) { - lines[initial++] = ''; - } - } -} - -var convert_1$s = convert$v; - -function convert$v(test) { - if (typeof test === 'string') { - return typeFactory$s(test) - } - - if (test === null || test === undefined) { - return ok$t - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$s : matchesFactory$s)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$s(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$v(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$s(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$s(tests) { - var checks = convertAll$s(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$s(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$t() { - return true -} - -var unistUtilVisitParents$s = visitParents$s; - - - -var CONTINUE$U = true; -var SKIP$U = 'skip'; -var EXIT$U = false; - -visitParents$s.CONTINUE = CONTINUE$U; -visitParents$s.SKIP = SKIP$U; -visitParents$s.EXIT = EXIT$U; - -function visitParents$s(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$s(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$s(visitor(node, parents)); - - if (result[0] === EXIT$U) { - return result - } - } - - if (node.children && result[0] !== SKIP$U) { - subresult = toResult$s(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$U ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$U) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$s(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$U, value] - } - - return [value] -} - -var unistUtilVisit$s = visit$s; - - - -var CONTINUE$V = unistUtilVisitParents$s.CONTINUE; -var SKIP$V = unistUtilVisitParents$s.SKIP; -var EXIT$V = unistUtilVisitParents$s.EXIT; - -visit$s.CONTINUE = CONTINUE$V; -visit$s.SKIP = SKIP$V; -visit$s.EXIT = EXIT$V; - -function visit$s(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$s(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - -var remarkLintNoConsecutiveBlankLines = unifiedLintRule( - 'remark-lint:no-consecutive-blank-lines', - noConsecutiveBlankLines -); - -function noConsecutiveBlankLines(tree, file) { - unistUtilVisit$s(tree, visitor); - - function visitor(node) { - var children = node.children; - var head; - var tail; - - if (!unistUtilGenerated(node) && children) { - head = children[0]; - - if (head && !unistUtilGenerated(head)) { - // Compare parent and first child. - compare(unistUtilPosition.start(node), unistUtilPosition.start(head), 0); - - // Compare between each child. - children.forEach(visitChild); - - tail = children[children.length - 1]; - - // Compare parent and last child. - if (tail !== head && !unistUtilGenerated(tail)) { - compare(unistUtilPosition.end(node), unistUtilPosition.end(tail), 1); - } - } - } - } - - // Compare the difference between `start` and `end`, and warn when that - // difference exceeds `max`. - function compare(start, end, max) { - var diff = end.line - start.line; - var lines = Math.abs(diff) - max; - var reason; - - if (lines > 0) { - reason = - 'Remove ' + - lines + - ' ' + - pluralize('line', Math.abs(lines)) + - ' ' + - (diff > 0 ? 'before' : 'after') + - ' node'; - - file.message(reason, end); - } - } - - function visitChild(child, index, all) { - var previous = all[index - 1]; - var max = 2; - - if (previous && !unistUtilGenerated(previous) && !unistUtilGenerated(child)) { - if ( - (previous.type === 'list' && child.type === 'list') || - (child.type === 'code' && previous.type === 'list' && !child.lang) - ) { - max++; - } - - compare(unistUtilPosition.end(previous), unistUtilPosition.start(child), max); - } - } -} - -var remarkLintNoFileNameArticles = unifiedLintRule('remark-lint:no-file-name-articles', noFileNameArticles); - -function noFileNameArticles(tree, file) { - var match = file.stem && file.stem.match(/^(the|teh|an?)\b/i); - - if (match) { - file.message('Do not start file names with `' + match[0] + '`'); - } -} - -var remarkLintNoFileNameConsecutiveDashes = unifiedLintRule( - 'remark-lint:no-file-name-consecutive-dashes', - noFileNameConsecutiveDashes -); - -var reason$b = 'Do not use consecutive dashes in a file name'; - -function noFileNameConsecutiveDashes(tree, file) { - if (file.stem && /-{2,}/.test(file.stem)) { - file.message(reason$b); - } -} - -var remarkLintNoFileNameOuterDashes = unifiedLintRule( - 'remark-lint:no-file-name-outer-dashes', - noFileNameOuterDashes -); - -var reason$c = 'Do not use initial or final dashes in a file name'; - -function noFileNameOuterDashes(tree, file) { - if (file.stem && /^-|-$/.test(file.stem)) { - file.message(reason$c); - } -} - -var convert_1$t = convert$w; - -function convert$w(test) { - if (typeof test === 'string') { - return typeFactory$t(test) - } - - if (test === null || test === undefined) { - return ok$u - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$t : matchesFactory$t)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$t(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$w(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$t(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$t(tests) { - var checks = convertAll$t(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$t(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$u() { - return true -} - -var unistUtilVisitParents$t = visitParents$t; - - - -var CONTINUE$W = true; -var SKIP$W = 'skip'; -var EXIT$W = false; - -visitParents$t.CONTINUE = CONTINUE$W; -visitParents$t.SKIP = SKIP$W; -visitParents$t.EXIT = EXIT$W; - -function visitParents$t(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$t(test); - - one(tree, null, []); + 'series', + 'sewage', + 'shambles', + 'shrimp', + 'software', + 'species', + 'staff', + 'swine', + 'tennis', + 'traffic', + 'transportation', + 'trout', + 'tuna', + 'wealth', + 'welfare', + 'whiting', + 'wildebeest', + 'wildlife', + 'you', + /pok[eé]mon$/i, + // Regexes. + /[^aeiou]ese$/i, // "chinese", "japanese" + /deer$/i, // "deer", "reindeer" + /fish$/i, // "fish", "blowfish", "angelfish" + /measles$/i, + /o[iu]s$/i, // "carnivorous" + /pox$/i, // "chickpox", "smallpox" + /sheep$/i + ].forEach(pluralize.addUncountableRule); - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; + return pluralize; +}); +}); - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$t(visitor(node, parents)); +var start$1 = factory$9('start'); +var end = factory$9('end'); - if (result[0] === EXIT$W) { - return result - } - } +var unistUtilPosition = position$1; - if (node.children && result[0] !== SKIP$W) { - subresult = toResult$t(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$W ? subresult : result - } +position$1.start = start$1; +position$1.end = end; - return result - } +function position$1(node) { + return {start: start$1(node), end: end(node)} +} - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; +function factory$9(type) { + point.displayName = type; - while (index > min && index < children.length) { - result = one(children[index], index, parents); + return point - if (result[0] === EXIT$W) { - return result - } + function point(node) { + var point = (node && node.position && node.position[type]) || {}; - index = typeof result[1] === 'number' ? result[1] : index + step; + return { + line: point.line || null, + column: point.column || null, + offset: isNaN(point.offset) ? null : point.offset } } } -function toResult$t(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } +var unistUtilGenerated = generated; - if (typeof value === 'number') { - return [CONTINUE$W, value] - } +function generated(node) { + var position = optional(optional(node).position); + var start = optional(position.start); + var end = optional(position.end); - return [value] + return !start.line || !start.column || !end.line || !end.column } -var unistUtilVisit$t = visit$t; - - - -var CONTINUE$X = unistUtilVisitParents$t.CONTINUE; -var SKIP$X = unistUtilVisitParents$t.SKIP; -var EXIT$X = unistUtilVisitParents$t.EXIT; - -visit$t.CONTINUE = CONTINUE$X; -visit$t.SKIP = SKIP$X; -visit$t.EXIT = EXIT$X; - -function visit$t(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$t(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } +function optional(value) { + return value && typeof value === 'object' ? value : {} } -var remarkLintNoHeadingIndent = unifiedLintRule('remark-lint:no-heading-indent', noHeadingIndent); +var remarkLintListItemBulletIndent = unifiedLintRule( + 'remark-lint:list-item-bullet-indent', + listItemBulletIndent +); -var start$e = unistUtilPosition.start; +var start$2 = unistUtilPosition.start; -function noHeadingIndent(tree, file) { +function listItemBulletIndent(tree, file) { var contents = String(file); - var length = contents.length; - unistUtilVisit$t(tree, 'heading', visitor); + unistUtilVisit(tree, 'list', visitor); function visitor(node) { - var initial; - var begin; - var index; - var character; - var diff; + node.children.forEach(visitItems); + } - if (unistUtilGenerated(node)) { - return - } + function visitItems(item) { + var final; + var indent; + var reason; - initial = start$e(node); - begin = initial.offset; - index = begin - 1; + if (!unistUtilGenerated(item)) { + final = start$2(item.children[0]); + indent = contents.slice(start$2(item).offset, final.offset).match(/^\s*/)[0] + .length; - while (++index < length) { - character = contents.charAt(index); + if (indent !== 0) { + reason = + 'Incorrect indentation before bullet: remove ' + + indent + + ' ' + + pluralize('space', indent); - if (character !== ' ' && character !== '\t') { - break + file.message(reason, { + line: final.line, + column: final.column - indent + }); } } - - diff = index - begin; - - if (diff) { - file.message( - 'Remove ' + diff + ' ' + pluralize('space', diff) + ' before this heading', - { - line: initial.line, - column: initial.column + diff - } - ); - } } } -var convert_1$u = convert$x; +var remarkLintListItemIndent = unifiedLintRule('remark-lint:list-item-indent', listItemIndent); -function convert$x(test) { - if (typeof test === 'string') { - return typeFactory$u(test) - } +var start$3 = unistUtilPosition.start; - if (test === null || test === undefined) { - return ok$v - } +var styles$1 = {'tab-size': true, mixed: true, space: true}; - if (typeof test === 'object') { - return ('length' in test ? anyFactory$u : matchesFactory$u)(test) - } +function listItemIndent(tree, file, option) { + var contents = String(file); + var preferred = typeof option === 'string' ? option : 'tab-size'; - if (typeof test === 'function') { - return test + if (styles$1[preferred] !== true) { + file.fail( + 'Incorrect list-item indent style `' + + preferred + + "`: use either `'tab-size'`, `'space'`, or `'mixed'`" + ); } - throw new Error('Expected function, string, or object as test') -} - -function convertAll$u(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$x(tests[index]); - } + unistUtilVisit(tree, 'list', visitor); - return results -} + function visitor(node) { + var spread = node.spread || node.loose; -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$u(test) { - return matches + if (!unistUtilGenerated(node)) { + node.children.forEach(visitItem); + } - function matches(node) { - var key; + function visitItem(item) { + var head = item.children[0]; + var final = start$3(head); + var marker; + var bulletSize; + var style; + var diff; + var reason; + var abs; - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } + marker = contents + .slice(start$3(item).offset, final.offset) + .replace(/\[[x ]?]\s*$/i, ''); - return true - } -} + bulletSize = marker.replace(/\s+$/, '').length; -function anyFactory$u(tests) { - var checks = convertAll$u(tests); - var length = checks.length; + style = + preferred === 'tab-size' || (preferred === 'mixed' && spread) + ? Math.ceil(bulletSize / 4) * 4 + : bulletSize + 1; - return matches + if (marker.length !== style) { + diff = style - marker.length; + abs = Math.abs(diff); - function matches() { - var index = -1; + reason = + 'Incorrect list-item indent: ' + + (diff > 0 ? 'add' : 'remove') + + ' ' + + abs + + ' ' + + pluralize('space', abs); - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true + file.message(reason, final); } } - - return false } } -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$u(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} +var mdastUtilToString = toString$3; -// Utility to return true. -function ok$v() { - return true +// Get the text content of a node. +// Prefer the node’s plain-text fields, otherwise serialize its children, +// and if the given value is an array, serialize the nodes in it. +function toString$3(node) { + return ( + (node && + (node.value || + node.alt || + node.title || + ('children' in node && all$1(node.children)) || + ('length' in node && all$1(node)))) || + '' + ) } -var unistUtilVisitParents$u = visitParents$u; - - - -var CONTINUE$Y = true; -var SKIP$Y = 'skip'; -var EXIT$Y = false; - -visitParents$u.CONTINUE = CONTINUE$Y; -visitParents$u.SKIP = SKIP$Y; -visitParents$u.EXIT = EXIT$Y; - -function visitParents$u(tree, test, visitor, reverse) { - var is; +function all$1(values) { + var result = []; + var length = values.length; + var index = -1; - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + while (++index < length) { + result[index] = toString$3(values[index]); } - is = convert_1$u(test); - - one(tree, null, []); + return result.join('') +} - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; +var remarkLintNoAutoLinkWithoutProtocol = unifiedLintRule( + 'remark-lint:no-auto-link-without-protocol', + noAutoLinkWithoutProtocol +); - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$u(visitor(node, parents)); +var start$4 = unistUtilPosition.start; +var end$1 = unistUtilPosition.end; - if (result[0] === EXIT$Y) { - return result - } - } +// Protocol expression. +// See: . +var protocol$2 = /^[a-z][a-z+.-]+:\/?/i; - if (node.children && result[0] !== SKIP$Y) { - subresult = toResult$u(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$Y ? subresult : result - } +var reason = 'All automatic links must start with a protocol'; - return result - } +function noAutoLinkWithoutProtocol(tree, file) { + unistUtilVisit(tree, 'link', visitor); - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; + function visitor(node) { + var children; - while (index > min && index < children.length) { - result = one(children[index], index, parents); + if (!unistUtilGenerated(node)) { + children = node.children; - if (result[0] === EXIT$Y) { - return result + if ( + start$4(node).column === start$4(children[0]).column - 1 && + end$1(node).column === end$1(children[children.length - 1]).column + 1 && + !protocol$2.test(mdastUtilToString(node)) + ) { + file.message(reason, node); } - - index = typeof result[1] === 'number' ? result[1] : index + step; } } } -function toResult$u(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$Y, value] - } - - return [value] -} - -var unistUtilVisit$u = visit$u; - - - -var CONTINUE$Z = unistUtilVisitParents$u.CONTINUE; -var SKIP$Z = unistUtilVisitParents$u.SKIP; -var EXIT$Z = unistUtilVisitParents$u.EXIT; - -visit$u.CONTINUE = CONTINUE$Z; -visit$u.SKIP = SKIP$Z; -visit$u.EXIT = EXIT$Z; +var remarkLintNoBlockquoteWithoutMarker = unifiedLintRule( + 'remark-lint:no-blockquote-without-marker', + noBlockquoteWithoutMarker +); -function visit$u(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +var reason$1 = 'Missing marker in block quote'; - unistUtilVisitParents$u(tree, test, overload, reverse); +function noBlockquoteWithoutMarker(tree, file) { + var contents = String(file); + var location = vfileLocation(file); + var last = contents.length; - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} + unistUtilVisit(tree, 'blockquote', visitor); -var start$f = unistUtilPosition.start; + function visitor(node) { + var indent = node.position && node.position.indent; + var start; + var length; + var index; + var line; + var offset; + var character; + var pos; + if (unistUtilGenerated(node) || !indent || indent.length === 0) { + return + } + start = unistUtilPosition.start(node).line; + length = indent.length; + index = -1; -var remarkLintNoMultipleToplevelHeadings = unifiedLintRule( - 'remark-lint:no-multiple-toplevel-headings', - noMultipleToplevelHeadings -); + while (++index < length) { + line = start + index + 1; + pos = {line: line, column: indent[index]}; + offset = location.toOffset(pos) - 1; -function noMultipleToplevelHeadings(tree, file, option) { - var preferred = option || 1; - var duplicate; + while (++offset < last) { + character = contents.charAt(offset); - unistUtilVisit$u(tree, 'heading', visitor); + if (character === '>') { + break + } - function visitor(node) { - if (!unistUtilGenerated(node) && node.depth === preferred) { - if (duplicate) { - file.message( - 'Don’t use multiple top level headings (' + duplicate + ')', - node - ); - } else { - duplicate = unistUtilStringifyPosition(start$f(node)); + /* istanbul ignore else - just for safety */ + if (character !== ' ' && character !== '\t') { + file.message(reason$1, pos); + break + } } } } } -var convert_1$v = convert$y; +var remarkLintNoLiteralUrls = unifiedLintRule('remark-lint:no-literal-urls', noLiteralURLs); -function convert$y(test) { - if (typeof test === 'string') { - return typeFactory$v(test) - } +var start$5 = unistUtilPosition.start; +var end$2 = unistUtilPosition.end; +var mailto$2 = 'mailto:'; +var reason$2 = 'Don’t use literal URLs without angle brackets'; - if (test === null || test === undefined) { - return ok$w - } +function noLiteralURLs(tree, file) { + unistUtilVisit(tree, 'link', visitor); - if (typeof test === 'object') { - return ('length' in test ? anyFactory$v : matchesFactory$v)(test) - } + function visitor(node) { + var children = node.children; + var value = mdastUtilToString(node); - if (typeof test === 'function') { - return test + if ( + !unistUtilGenerated(node) && + start$5(node).column === start$5(children[0]).column && + end$2(node).column === end$2(children[children.length - 1]).column && + (node.url === mailto$2 + value || node.url === value) + ) { + file.message(reason$2, node); + } } - - throw new Error('Expected function, string, or object as test') } -function convertAll$v(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$y(tests[index]); - } - - return results -} +var remarkLintOrderedListMarkerStyle = unifiedLintRule( + 'remark-lint:ordered-list-marker-style', + orderedListMarkerStyle +); -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$v(test) { - return matches +var start$6 = unistUtilPosition.start; - function matches(node) { - var key; +var styles$2 = { + ')': true, + '.': true, + null: true +}; - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } +function orderedListMarkerStyle(tree, file, option) { + var contents = String(file); + var preferred = + typeof option !== 'string' || option === 'consistent' ? null : option; - return true + if (styles$2[preferred] !== true) { + file.fail( + 'Incorrect ordered list item marker style `' + + preferred + + "`: use either `'.'` or `')'`" + ); } -} -function anyFactory$v(tests) { - var checks = convertAll$v(tests); - var length = checks.length; - - return matches + unistUtilVisit(tree, 'list', visitor); - function matches() { + function visitor(node) { + var children = node.children; + var length = node.ordered ? children.length : 0; var index = -1; + var marker; + var child; while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} + child = children[index]; -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$v(test) { - return type + if (!unistUtilGenerated(child)) { + marker = contents + .slice(start$6(child).offset, start$6(child.children[0]).offset) + .replace(/\s|\d/g, '') + .replace(/\[[x ]?]\s*$/i, ''); - function type(node) { - return Boolean(node && node.type === test) + if (preferred) { + if (marker !== preferred) { + file.message('Marker style should be `' + preferred + '`', child); + } + } else { + preferred = marker; + } + } + } } } -// Utility to return true. -function ok$w() { - return true -} - -var unistUtilVisitParents$v = visitParents$v; +var remarkLintHardBreakSpaces = unifiedLintRule('remark-lint:hard-break-spaces', hardBreakSpaces); +var reason$3 = 'Use two spaces for hard line breaks'; +function hardBreakSpaces(tree, file) { + var contents = String(file); -var CONTINUE$_ = true; -var SKIP$_ = 'skip'; -var EXIT$_ = false; + unistUtilVisit(tree, 'break', visitor); -visitParents$v.CONTINUE = CONTINUE$_; -visitParents$v.SKIP = SKIP$_; -visitParents$v.EXIT = EXIT$_; + function visitor(node) { + var value; -function visitParents$v(tree, test, visitor, reverse) { - var is; + if (!unistUtilGenerated(node)) { + value = contents + .slice(unistUtilPosition.start(node).offset, unistUtilPosition.end(node).offset) + .split('\n', 1)[0] + .replace(/\r$/, ''); - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + if (value.length > 2) { + file.message(reason$3, node); + } + } } +} - is = convert_1$v(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$v(visitor(node, parents)); +var remarkLintNoDuplicateDefinitions = unifiedLintRule( + 'remark-lint:no-duplicate-definitions', + noDuplicateDefinitions +); - if (result[0] === EXIT$_) { - return result - } - } +var reason$4 = 'Do not use definitions with the same identifier'; - if (node.children && result[0] !== SKIP$_) { - subresult = toResult$v(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$_ ? subresult : result - } +function noDuplicateDefinitions(tree, file) { + var map = {}; - return result - } + unistUtilVisit(tree, ['definition', 'footnoteDefinition'], check); - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; + function check(node) { + var identifier; + var duplicate; - while (index > min && index < children.length) { - result = one(children[index], index, parents); + if (!unistUtilGenerated(node)) { + identifier = node.identifier; + duplicate = map[identifier]; - if (result[0] === EXIT$_) { - return result + if (duplicate && duplicate.type) { + file.message( + reason$4 + ' (' + unistUtilStringifyPosition(unistUtilPosition.start(duplicate)) + ')', + node + ); } - index = typeof result[1] === 'number' ? result[1] : index + step; + map[identifier] = node; } } } -function toResult$v(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$_, value] - } - - return [value] -} +var mdastUtilHeadingStyle = style; -var unistUtilVisit$v = visit$v; +function style(node, relative) { + var last = node.children[node.children.length - 1]; + var depth = node.depth; + var pos = node && node.position && node.position.end; + var final = last && last.position && last.position.end; + if (!pos) { + return null + } + // This can only occur for `'atx'` and `'atx-closed'` headings. + // This might incorrectly match `'atx'` headings with lots of trailing white + // space as an `'atx-closed'` heading. + if (!last) { + if (pos.column - 1 <= depth * 2) { + return consolidate(depth, relative) + } -var CONTINUE$$ = unistUtilVisitParents$v.CONTINUE; -var SKIP$$ = unistUtilVisitParents$v.SKIP; -var EXIT$$ = unistUtilVisitParents$v.EXIT; + return 'atx-closed' + } -visit$v.CONTINUE = CONTINUE$$; -visit$v.SKIP = SKIP$$; -visit$v.EXIT = EXIT$$; + if (final.line + 1 === pos.line) { + return 'setext' + } -function visit$v(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + if (final.column + depth < pos.column) { + return 'atx-closed' } - unistUtilVisitParents$v(tree, test, overload, reverse); + return consolidate(depth, relative) +} - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } +// Get the probable style of an atx-heading, depending on preferred style. +function consolidate(depth, relative) { + return depth < 3 + ? 'atx' + : relative === 'atx' || relative === 'setext' + ? relative + : null } -var remarkLintNoShellDollars = unifiedLintRule('remark-lint:no-shell-dollars', noShellDollars); +var remarkLintNoHeadingContentIndent = unifiedLintRule( + 'remark-lint:no-heading-content-indent', + noHeadingContentIndent +); -var reason$d = 'Do not use dollar signs before shell commands'; +var start$7 = unistUtilPosition.start; +var end$3 = unistUtilPosition.end; -// List of shell script file extensions (also used as code flags for syntax -// highlighting on GitHub): -// See: -var flags = [ - 'sh', - 'bash', - 'bats', - 'cgi', - 'command', - 'fcgi', - 'ksh', - 'tmux', - 'tool', - 'zsh' -]; +function noHeadingContentIndent(tree, file) { + var contents = String(file); -function noShellDollars(tree, file) { - unistUtilVisit$v(tree, 'code', visitor); + unistUtilVisit(tree, 'heading', visitor); function visitor(node) { - var lines; - var line; - var length; + var depth; + var children; + var type; + var head; + var initial; + var final; + var diff; var index; + var char; + var reason; + var abs; - // Check both known shell code and unknown code. - if (!unistUtilGenerated(node) && node.lang && flags.indexOf(node.lang) !== -1) { - lines = node.value.split('\n'); - length = lines.length; - index = -1; + if (unistUtilGenerated(node)) { + return + } + + depth = node.depth; + children = node.children; + type = mdastUtilHeadingStyle(node, 'atx'); + + if (type === 'atx' || type === 'atx-closed') { + initial = start$7(node); + index = initial.offset; + char = contents.charAt(index); + + while (char && char !== '#') { + char = contents.charAt(++index); + } - if (length <= 1) { + /* istanbul ignore if - CR/LF bug: remarkjs/remark#195. */ + if (!char) { return } - while (++index < length) { - line = lines[index]; + index = depth + (index - initial.offset); + head = start$7(children[0]).column; - if (line.trim() && !line.match(/^\s*\$\s*/)) { - return - } + // Ignore empty headings. + if (!head) { + return } - file.message(reason$d, node); - } - } -} + diff = head - initial.column - 1 - index; -var convert_1$w = convert$z; + if (diff) { + abs = Math.abs(diff); -function convert$z(test) { - if (typeof test === 'string') { - return typeFactory$w(test) - } + reason = + (diff > 0 ? 'Remove' : 'Add') + + ' ' + + abs + + ' ' + + pluralize('space', abs) + + ' before this heading’s content'; - if (test === null || test === undefined) { - return ok$x - } + file.message(reason, start$7(children[0])); + } + } - if (typeof test === 'object') { - return ('length' in test ? anyFactory$w : matchesFactory$w)(test) - } + // Closed ATX headings always must have a space between their content and + // the final hashes, thus, there is no `add x spaces`. + if (type === 'atx-closed') { + final = end$3(children[children.length - 1]); + diff = end$3(node).column - final.column - 1 - depth; - if (typeof test === 'function') { - return test - } + if (diff) { + reason = + 'Remove ' + + diff + + ' ' + + pluralize('space', diff) + + ' after this heading’s content'; - throw new Error('Expected function, string, or object as test') + file.message(reason, final); + } + } + } } -function convertAll$w(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$z(tests[index]); - } +var remarkLintNoInlinePadding = unifiedLintRule('remark-lint:no-inline-padding', noInlinePadding); - return results -} +function noInlinePadding(tree, file) { + unistUtilVisit(tree, ['emphasis', 'strong', 'delete', 'image', 'link'], visitor); -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$w(test) { - return matches + function visitor(node) { + var contents; - function matches(node) { - var key; + if (!unistUtilGenerated(node)) { + contents = mdastUtilToString(node); - for (key in test) { - if (node[key] !== test[key]) { - return false + if ( + contents.charAt(0) === ' ' || + contents.charAt(contents.length - 1) === ' ' + ) { + file.message('Don’t pad `' + node.type + '` with inner spaces', node); } } - - return true } } -function anyFactory$w(tests) { - var checks = convertAll$w(tests); - var length = checks.length; +var remarkLintNoShortcutReferenceImage = unifiedLintRule( + 'remark-lint:no-shortcut-reference-image', + noShortcutReferenceImage +); - return matches +var reason$5 = 'Use the trailing [] on reference images'; - function matches() { - var index = -1; +function noShortcutReferenceImage(tree, file) { + unistUtilVisit(tree, 'imageReference', visitor); - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } + function visitor(node) { + if (!unistUtilGenerated(node) && node.referenceType === 'shortcut') { + file.message(reason$5, node); } - - return false } } -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$w(test) { - return type +var remarkLintNoShortcutReferenceLink = unifiedLintRule( + 'remark-lint:no-shortcut-reference-link', + noShortcutReferenceLink +); - function type(node) { - return Boolean(node && node.type === test) - } -} +var reason$6 = 'Use the trailing `[]` on reference links'; -// Utility to return true. -function ok$x() { - return true +function noShortcutReferenceLink(tree, file) { + unistUtilVisit(tree, 'linkReference', visitor); + + function visitor(node) { + if (!unistUtilGenerated(node) && node.referenceType === 'shortcut') { + file.message(reason$6, node); + } + } } -var unistUtilVisitParents$w = visitParents$w; +var remarkLintNoUndefinedReferences = unifiedLintRule( + 'remark-lint:no-undefined-references', + noUndefinedReferences +); +var reason$7 = 'Found reference to undefined definition'; +// The identifier is upcased to avoid naming collisions with fields inherited +// from `Object.prototype`. +// If `Object.create(null)` was used in place of `{}`, downcasing would work +// equally well. +function normalize$3(s) { + return collapseWhiteSpace(s.toUpperCase()) +} -var CONTINUE$10 = true; -var SKIP$10 = 'skip'; -var EXIT$10 = false; +function noUndefinedReferences(tree, file, option) { + var allow = ((option || {}).allow || []).map(normalize$3); + var map = {}; -visitParents$w.CONTINUE = CONTINUE$10; -visitParents$w.SKIP = SKIP$10; -visitParents$w.EXIT = EXIT$10; + unistUtilVisit(tree, ['definition', 'footnoteDefinition'], mark); + unistUtilVisit(tree, ['imageReference', 'linkReference', 'footnoteReference'], find); -function visitParents$w(tree, test, visitor, reverse) { - var is; + function mark(node) { + if (!unistUtilGenerated(node)) { + map[normalize$3(node.identifier)] = true; + } + } - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + function find(node) { + if ( + !unistUtilGenerated(node) && + !(normalize$3(node.identifier) in map) && + allow.indexOf(normalize$3(node.identifier)) === -1 + ) { + file.message(reason$7, node); + } } +} - is = convert_1$w(test); +var remarkLintNoUnusedDefinitions = unifiedLintRule('remark-lint:no-unused-definitions', noUnusedDefinitions); - one(tree, null, []); +var reason$8 = 'Found unused definition'; - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; +function noUnusedDefinitions(tree, file) { + var map = {}; + var identifier; + var entry; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$w(visitor(node, parents)); + unistUtilVisit(tree, ['definition', 'footnoteDefinition'], find); + unistUtilVisit(tree, ['imageReference', 'linkReference', 'footnoteReference'], mark); - if (result[0] === EXIT$10) { - return result - } - } + for (identifier in map) { + entry = map[identifier]; - if (node.children && result[0] !== SKIP$10) { - subresult = toResult$w(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$10 ? subresult : result + if (!entry.used) { + file.message(reason$8, entry.node); } - - return result } - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); + function find(node) { + if (!unistUtilGenerated(node)) { + map[node.identifier.toUpperCase()] = {node: node, used: false}; + } + } - if (result[0] === EXIT$10) { - return result - } + function mark(node) { + var info = map[node.identifier.toUpperCase()]; - index = typeof result[1] === 'number' ? result[1] : index + step; + if (!unistUtilGenerated(node) && info) { + info.used = true; } } } -function toResult$w(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$10, value] - } +var plugins$1 = [ + remarkLint, + // Unix compatibility. + remarkLintFinalNewline, + // Rendering across vendors differs greatly if using other styles. + remarkLintListItemBulletIndent, + [remarkLintListItemIndent, 'tab-size'], + // Differs or unsupported across vendors. + remarkLintNoAutoLinkWithoutProtocol, + remarkLintNoBlockquoteWithoutMarker, + remarkLintNoLiteralUrls, + [remarkLintOrderedListMarkerStyle, '.'], + // Mistakes. + remarkLintHardBreakSpaces, + remarkLintNoDuplicateDefinitions, + remarkLintNoHeadingContentIndent, + remarkLintNoInlinePadding, + remarkLintNoShortcutReferenceImage, + remarkLintNoShortcutReferenceLink, + remarkLintNoUndefinedReferences, + remarkLintNoUnusedDefinitions +]; - return [value] -} +var remarkPresetLintRecommended = { + plugins: plugins$1 +}; -var unistUtilVisit$w = visit$w; +var remarkLintBlockquoteIndentation = unifiedLintRule( + 'remark-lint:blockquote-indentation', + blockquoteIndentation +); +function blockquoteIndentation(tree, file, option) { + var preferred = typeof option === 'number' && !isNaN(option) ? option : null; + unistUtilVisit(tree, 'blockquote', visitor); -var CONTINUE$11 = unistUtilVisitParents$w.CONTINUE; -var SKIP$11 = unistUtilVisitParents$w.SKIP; -var EXIT$11 = unistUtilVisitParents$w.EXIT; + function visitor(node) { + var abs; + var diff; + var reason; -visit$w.CONTINUE = CONTINUE$11; -visit$w.SKIP = SKIP$11; -visit$w.EXIT = EXIT$11; + if (unistUtilGenerated(node) || node.children.length === 0) { + return + } -function visit$w(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } + if (preferred) { + diff = preferred - check$3(node); - unistUtilVisitParents$w(tree, test, overload, reverse); + if (diff !== 0) { + abs = Math.abs(diff); + reason = + (diff > 0 ? 'Add' : 'Remove') + + ' ' + + abs + + ' ' + + pluralize('space', abs) + + ' between block quote and content'; - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + file.message(reason, unistUtilPosition.start(node.children[0])); + } + } else { + preferred = check$3(node); + } } } -var remarkLintNoTableIndentation = unifiedLintRule('remark-lint:no-table-indentation', noTableIndentation); +function check$3(node) { + var head = node.children[0]; + var indentation = unistUtilPosition.start(head).column - unistUtilPosition.start(node).column; + var padding = mdastUtilToString(head).match(/^ +/); -var reason$e = 'Do not indent table rows'; + if (padding) { + indentation += padding[0].length; + } -function noTableIndentation(tree, file) { - var contents = String(file); + return indentation +} - unistUtilVisit$w(tree, 'table', visitor); +var remarkLintCheckboxCharacterStyle = unifiedLintRule( + 'remark-lint:checkbox-character-style', + checkboxCharacterStyle +); - function visitor(node) { - if (!unistUtilGenerated(node)) { - node.children.forEach(each); - } +var start$8 = unistUtilPosition.start; +var end$4 = unistUtilPosition.end; - return unistUtilVisit$w.SKIP - } +var checked = {x: true, X: true}; +var unchecked = {' ': true, '\t': true}; +var types$1 = {true: 'checked', false: 'unchecked'}; - function each(row) { - var fence = contents.slice( - unistUtilPosition.start(row).offset, - unistUtilPosition.start(row.children[0]).offset - ); +function checkboxCharacterStyle(tree, file, option) { + var contents = String(file); + var location = vfileLocation(file); + var preferred = typeof option === 'object' ? option : {}; - if (fence.indexOf('|') > 1) { - file.message(reason$e, row); - } + if (preferred.unchecked && unchecked[preferred.unchecked] !== true) { + file.fail( + 'Incorrect unchecked checkbox marker `' + + preferred.unchecked + + "`: use either `'\\t'`, or `' '`" + ); } -} - -var vfileLocation$6 = factory$e; -function factory$e(file) { - var contents = indices$6(String(file)); - - return { - toPosition: offsetToPositionFactory$6(contents), - toOffset: positionToOffsetFactory$6(contents) + if (preferred.checked && checked[preferred.checked] !== true) { + file.fail( + 'Incorrect checked checkbox marker `' + + preferred.checked + + "`: use either `'x'`, or `'X'`" + ); } -} -// Factory to get the line and column-based `position` for `offset` in the bound -// indices. -function offsetToPositionFactory$6(indices) { - return offsetToPosition + unistUtilVisit(tree, 'listItem', visitor); - // Get the line and column-based `position` for `offset` in the bound indices. - function offsetToPosition(offset) { - var index = -1; - var length = indices.length; + function visitor(node) { + var type; + var initial; + var final; + var value; + var style; + var character; + var reason; - if (offset < 0) { - return {} + // Exit early for items without checkbox. + if (typeof node.checked !== 'boolean' || unistUtilGenerated(node)) { + return } - while (++index < length) { - if (indices[index] > offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset - } - } - } + type = types$1[node.checked]; + initial = start$8(node).offset; + final = (node.children.length === 0 ? end$4(node) : start$8(node.children[0])) + .offset; - return {} - } -} + // For a checkbox to be parsed, it must be followed by a whitespace. + value = contents.slice(initial, final).replace(/\s+$/, '').slice(0, -1); -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$6(indices) { - return positionToOffset + // The checkbox character is behind a square bracket. + character = value.charAt(value.length - 1); + style = preferred[type]; - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; + if (style) { + if (character !== style) { + reason = + type.charAt(0).toUpperCase() + + type.slice(1) + + ' checkboxes should use `' + + style + + '` as a marker'; - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 + file.message(reason, { + start: location.toPosition(initial + value.length - 1), + end: location.toPosition(initial + value.length) + }); + } + } else { + preferred[type] = character; } - - return -1 } } -// Get indices of line-breaks in `value`. -function indices$6(value) { - var result = []; - var index = value.indexOf('\n'); +var remarkLintCheckboxContentIndent = unifiedLintRule( + 'remark-lint:checkbox-content-indent', + checkboxContentIndent +); - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); - } +var start$9 = unistUtilPosition.start; +var end$5 = unistUtilPosition.end; - result.push(value.length + 1); +var reason$9 = 'Checkboxes should be followed by a single character'; - return result -} +function checkboxContentIndent(tree, file) { + var contents = String(file); + var location = vfileLocation(file); -var remarkLintNoTabs = unifiedLintRule('remark-lint:no-tabs', noTabs); + unistUtilVisit(tree, 'listItem', visitor); -var reason$f = 'Use spaces instead of tabs'; + function visitor(node) { + var initial; + var final; + var value; -function noTabs(tree, file) { - var content = String(file); - var position = vfileLocation$6(file).toPosition; - var index = content.indexOf('\t'); + // Exit early for items without checkbox. + if (typeof node.checked !== 'boolean' || unistUtilGenerated(node)) { + return + } - while (index !== -1) { - file.message(reason$f, position(index)); - index = content.indexOf('\t', index + 1); - } -} + initial = start$9(node).offset; + /* istanbul ignore next - hard to test, couldn’t find a case. */ + final = (node.children.length === 0 ? end$5(node) : start$9(node.children[0])) + .offset; -var remarkLintNoTrailingSpaces = unifiedLintRule('remark-lint:no-trailing-spaces', noTrailingSpaces); + while (/[^\S\n]/.test(contents.charAt(final))) { + final++; + } -/** - * Lines that are just space characters are not present in - * the AST, which is why we loop through lines manually. - */ + // For a checkbox to be parsed, it must be followed by a whitespace. + value = contents.slice(initial, final); + value = value.slice(value.indexOf(']') + 1); -function noTrailingSpaces(ast, file) { - var lines = file.toString().split(/\r?\n/); - for (var i = 0; i < lines.length; i++) { - var currentLine = lines[i]; - var lineIndex = i + 1; - if (/\s$/.test(currentLine)) { - file.message('Remove trailing whitespace', { - position: { - start: { line: lineIndex, column: currentLine.length + 1 }, - end: { line: lineIndex } - } + if (value.length !== 1) { + file.message(reason$9, { + start: location.toPosition(final - value.length + 1), + end: location.toPosition(final) }); } } } -var escapeStringRegexp$1 = string => { - if (typeof string !== 'string') { - throw new TypeError('Expected a string'); - } - - // Escape characters with special meaning either inside or outside character sets. - // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. - return string - .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') - .replace(/-/g, '\\x2d'); -}; - -var convert_1$x = convert$A; +var remarkLintCodeBlockStyle = unifiedLintRule('remark-lint:code-block-style', codeBlockStyle); -function convert$A(test) { - if (typeof test === 'string') { - return typeFactory$x(test) - } +var start$a = unistUtilPosition.start; +var end$6 = unistUtilPosition.end; - if (test === null || test === undefined) { - return ok$y - } +var styles$3 = {null: true, fenced: true, indented: true}; - if (typeof test === 'object') { - return ('length' in test ? anyFactory$x : matchesFactory$x)(test) - } +function codeBlockStyle(tree, file, option) { + var contents = String(file); + var preferred = + typeof option === 'string' && option !== 'consistent' ? option : null; - if (typeof test === 'function') { - return test + if (styles$3[preferred] !== true) { + file.fail( + 'Incorrect code block style `' + + preferred + + "`: use either `'consistent'`, `'fenced'`, or `'indented'`" + ); } - throw new Error('Expected function, string, or object as test') -} - -function convertAll$x(tests) { - var results = []; - var length = tests.length; - var index = -1; + unistUtilVisit(tree, 'code', visitor); - while (++index < length) { - results[index] = convert$A(tests[index]); - } + function visitor(node) { + var initial; + var final; + var current; - return results -} + if (unistUtilGenerated(node)) { + return null + } -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$x(test) { - return matches + initial = start$a(node).offset; + final = end$6(node).offset; - function matches(node) { - var key; + current = + node.lang || /^\s*([~`])\1{2,}/.test(contents.slice(initial, final)) + ? 'fenced' + : 'indented'; - for (key in test) { - if (node[key] !== test[key]) { - return false + if (preferred) { + if (preferred !== current) { + file.message('Code blocks should be ' + preferred, node); } + } else { + preferred = current; } - - return true } } -function anyFactory$x(tests) { - var checks = convertAll$x(tests); - var length = checks.length; - - return matches +var remarkLintDefinitionSpacing = unifiedLintRule('remark-lint:definition-spacing', definitionSpacing); - function matches() { - var index = -1; +var label$1 = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/; +var reason$a = 'Do not use consecutive whitespace in definition labels'; - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } +function definitionSpacing(tree, file) { + var contents = String(file); - return false - } -} + unistUtilVisit(tree, ['definition', 'footnoteDefinition'], check); -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$x(test) { - return type + function check(node) { + var start = unistUtilPosition.start(node).offset; + var end = unistUtilPosition.end(node).offset; - function type(node) { - return Boolean(node && node.type === test) + if ( + !unistUtilGenerated(node) && + /[ \t\n]{2,}/.test(contents.slice(start, end).match(label$1)[1]) + ) { + file.message(reason$a, node); + } } } -// Utility to return true. -function ok$y() { - return true -} - -var unistUtilVisitParents$x = visitParents$x; - - +var remarkLintFencedCodeFlag = unifiedLintRule('remark-lint:fenced-code-flag', fencedCodeFlag); -var CONTINUE$12 = true; -var SKIP$12 = 'skip'; -var EXIT$12 = false; +var start$b = unistUtilPosition.start; +var end$7 = unistUtilPosition.end; -visitParents$x.CONTINUE = CONTINUE$12; -visitParents$x.SKIP = SKIP$12; -visitParents$x.EXIT = EXIT$12; +var fence$2 = /^ {0,3}([~`])\1{2,}/; +var reasonIncorrect = 'Incorrect code language flag'; +var reasonMissing = 'Missing code language flag'; -function visitParents$x(tree, test, visitor, reverse) { - var is; +function fencedCodeFlag(tree, file, option) { + var contents = String(file); + var allowEmpty = false; + var allowed = []; + var flags = option; - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + if (typeof flags === 'object' && !('length' in flags)) { + allowEmpty = Boolean(flags.allowEmpty); + flags = flags.flags; } - is = convert_1$x(test); + if (typeof flags === 'object' && 'length' in flags) { + allowed = String(flags).split(','); + } - one(tree, null, []); + unistUtilVisit(tree, 'code', visitor); - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; + function visitor(node) { + var value; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$x(visitor(node, parents)); + if (!unistUtilGenerated(node)) { + if (node.lang) { + if (allowed.length !== 0 && allowed.indexOf(node.lang) === -1) { + file.message(reasonIncorrect, node); + } + } else { + value = contents.slice(start$b(node).offset, end$7(node).offset); - if (result[0] === EXIT$12) { - return result + if (!allowEmpty && fence$2.test(value)) { + file.message(reasonMissing, node); + } } } + } +} - if (node.children && result[0] !== SKIP$12) { - subresult = toResult$x(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$12 ? subresult : result - } +var remarkLintFencedCodeMarker = unifiedLintRule('remark-lint:fenced-code-marker', fencedCodeMarker); - return result +var markers = { + '`': true, + '~': true, + null: true +}; + +function fencedCodeMarker(tree, file, option) { + var contents = String(file); + var preferred = + typeof option === 'string' && option !== 'consistent' ? option : null; + + if (markers[preferred] !== true) { + file.fail( + 'Incorrect fenced code marker `' + + preferred + + "`: use either `'consistent'`, `` '`' ``, or `'~'`" + ); } - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; + unistUtilVisit(tree, 'code', visitor); - while (index > min && index < children.length) { - result = one(children[index], index, parents); + function visitor(node) { + var start; + var marker; + var label; - if (result[0] === EXIT$12) { - return result - } + if (!unistUtilGenerated(node)) { + start = unistUtilPosition.start(node).offset; + marker = contents + .slice(start, start + 4) + .replace(/^\s+/, '') + .charAt(0); - index = typeof result[1] === 'number' ? result[1] : index + step; + // Ignore unfenced code blocks. + if (markers[marker] === true) { + if (preferred) { + if (marker !== preferred) { + label = preferred === '~' ? preferred : '` ` `'; + file.message( + 'Fenced code should use `' + label + '` as a marker', + node + ); + } + } else { + preferred = marker; + } + } } } } -function toResult$x(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } +var remarkLintFileExtension = unifiedLintRule('remark-lint:file-extension', fileExtension); - if (typeof value === 'number') { - return [CONTINUE$12, value] - } +function fileExtension(tree, file, option) { + var ext = file.extname; + var preferred = typeof option === 'string' ? option : 'md'; - return [value] + if (ext && ext.slice(1) !== preferred) { + file.message('Incorrect extension: use `' + preferred + '`'); + } } -var unistUtilVisit$x = visit$x; - +var remarkLintFinalDefinition = unifiedLintRule('remark-lint:final-definition', finalDefinition); +var start$c = unistUtilPosition.start; -var CONTINUE$13 = unistUtilVisitParents$x.CONTINUE; -var SKIP$13 = unistUtilVisitParents$x.SKIP; -var EXIT$13 = unistUtilVisitParents$x.EXIT; +function finalDefinition(tree, file) { + var last = null; -visit$x.CONTINUE = CONTINUE$13; -visit$x.SKIP = SKIP$13; -visit$x.EXIT = EXIT$13; + unistUtilVisit(tree, visitor, true); -function visit$x(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } + function visitor(node) { + var line = start$c(node).line; - unistUtilVisitParents$x(tree, test, overload, reverse); + // Ignore generated nodes. + if (node.type === 'root' || unistUtilGenerated(node)) { + return + } - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + if (node.type === 'definition') { + if (last !== null && last > line) { + file.message( + 'Move definitions to the end of the file (after the node at line `' + + last + + '`)', + node + ); + } + } else if (last === null) { + last = line; + } } } -var vfileLocation$7 = factory$f; +var remarkLintFirstHeadingLevel = unifiedLintRule('remark-lint:first-heading-level', firstHeadingLevel); -function factory$f(file) { - var contents = indices$7(String(file)); +var re$3 = / offset) { - return { - line: index + 1, - column: offset - (indices[index - 1] || 0) + 1, - offset: offset + if (rank !== undefined) { + if (rank !== preferred) { + file.message( + 'First heading level should be `' + preferred + '`', + node + ); } + + return unistUtilVisit.EXIT } } - - return {} } } -// Factory to get the `offset` for a line and column-based `position` in the -// bound indices. -function positionToOffsetFactory$7(indices) { - return positionToOffset - - // Get the `offset` for a line and column-based `position` in the bound - // indices. - function positionToOffset(position) { - var line = position && position.line; - var column = position && position.column; - - if (!isNaN(line) && !isNaN(column) && line - 1 in indices) { - return (indices[line - 2] || 0) + column - 1 || 0 - } - - return -1 - } +function infer(node) { + var results = node.value.match(re$3); + return results ? Number(results[1]) : undefined } -// Get indices of line-breaks in `value`. -function indices$7(value) { - var result = []; - var index = value.indexOf('\n'); - - while (index !== -1) { - result.push(index + 1); - index = value.indexOf('\n', index + 1); - } - - result.push(value.length + 1); - - return result -} +var remarkLintHeadingStyle = unifiedLintRule('remark-lint:heading-style', headingStyle); -const start$g = unistUtilPosition.start; +var types$2 = ['atx', 'atx-closed', 'setext']; -var remarkLintProhibitedStrings = unifiedLintRule('remark-lint:prohibited-strings', prohibitedStrings); +function headingStyle(tree, file, option) { + var preferred = types$2.indexOf(option) === -1 ? null : option; -function testProhibited (val, content) { - let regexpFlags = 'g'; + unistUtilVisit(tree, 'heading', visitor); - if (!val.no) { - val.no = escapeStringRegexp$1(val.yes); - regexpFlags += 'i'; + function visitor(node) { + if (!unistUtilGenerated(node)) { + if (preferred) { + if (mdastUtilHeadingStyle(node, preferred) !== preferred) { + file.message('Headings should use ' + preferred, node); + } + } else { + preferred = mdastUtilHeadingStyle(node, preferred); + } + } } +} - let regexpString = '(?. + unistUtilVisit(tree, ['heading', 'table', 'code', 'definition', 'html', 'jsx'], ignore); + unistUtilVisit(tree, ['link', 'image', 'inlineCode'], inline); - // If it ends with a letter, make sure it is a word break. - if (/\b$/.test(val.no)) { - regexpString += '\\b'; - } - regexpString += '(?!\\.\\w)'; - const re = new RegExp(regexpString, regexpFlags); + // Iterate over every line, and warn for violating lines. + while (++index < length) { + lineLength = lines[index].length; - const results = []; - let result = re.exec(content); - while (result) { - if (result[1] !== val.yes) { - results.push({ result: result[1], index: result.index }); + if (lineLength > preferred) { + file.message('Line must be at most ' + preferred + ' characters', { + line: index + 1, + column: lineLength + 1 + }); } - result = re.exec(content); } - return results -} - -function prohibitedStrings (ast, file, strings) { - const location = vfileLocation$7(file); + // Finally, whitelist some inline spans, but only if they occur at or after + // the wrap. + // However, when they do, and there’s whitespace after it, they are not + // whitelisted. + function inline(node, pos, parent) { + var next = parent.children[pos + 1]; + var initial; + var final; - unistUtilVisit$x(ast, 'text', checkText); + /* istanbul ignore if - Nothing to whitelist when generated. */ + if (unistUtilGenerated(node)) { + return + } - function checkText (node) { - const content = node.value; - const initial = start$g(node).offset; + initial = start$d(node); + final = end$8(node); - strings.forEach((val) => { - const results = testProhibited(val, content); - if (results.length) { - results.forEach(({ result, index }) => { - const message = val.yes ? `Use "${val.yes}" instead of "${result}"` : `Do not use "${result}"`; - file.message(message, { - start: location.toPosition(initial + index), - end: location.toPosition(initial + index + [...result].length) - }); - }); - } - }); - } -} + // No whitelisting when starting after the border, or ending before it. + if (initial.column > preferred || final.column < preferred) { + return + } -var convert_1$y = convert$B; + // No whitelisting when there’s whitespace after the link. + if ( + next && + start$d(next).line === initial.line && + (!next.value || /^(.+?[ \t].+?)/.test(next.value)) + ) { + return + } -function convert$B(test) { - if (typeof test === 'string') { - return typeFactory$y(test) + whitelist(initial.line - 1, final.line); } - if (test === null || test === undefined) { - return ok$z + function ignore(node) { + /* istanbul ignore else - Hard to test, as we only run this case on `position: true` */ + if (!unistUtilGenerated(node)) { + whitelist(start$d(node).line - 1, end$8(node).line); + } } - if (typeof test === 'object') { - return ('length' in test ? anyFactory$y : matchesFactory$y)(test) + // Whitelist from `initial` to `final`, zero-based. + function whitelist(initial, final) { + while (initial < final) { + lines[initial++] = ''; + } } +} - if (typeof test === 'function') { - return test - } +var remarkLintNoConsecutiveBlankLines = unifiedLintRule( + 'remark-lint:no-consecutive-blank-lines', + noConsecutiveBlankLines +); - throw new Error('Expected function, string, or object as test') -} +function noConsecutiveBlankLines(tree, file) { + unistUtilVisit(tree, visitor); -function convertAll$y(tests) { - var results = []; - var length = tests.length; - var index = -1; + function visitor(node) { + var children = node.children; + var head; + var tail; - while (++index < length) { - results[index] = convert$B(tests[index]); - } + if (!unistUtilGenerated(node) && children) { + head = children[0]; - return results -} + if (head && !unistUtilGenerated(head)) { + // Compare parent and first child. + compare(unistUtilPosition.start(node), unistUtilPosition.start(head), 0); -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$y(test) { - return matches + // Compare between each child. + children.forEach(visitChild); - function matches(node) { - var key; + tail = children[children.length - 1]; - for (key in test) { - if (node[key] !== test[key]) { - return false + // Compare parent and last child. + if (tail !== head && !unistUtilGenerated(tail)) { + compare(unistUtilPosition.end(node), unistUtilPosition.end(tail), 1); + } } } - - return true } -} -function anyFactory$y(tests) { - var checks = convertAll$y(tests); - var length = checks.length; + // Compare the difference between `start` and `end`, and warn when that + // difference exceeds `max`. + function compare(start, end, max) { + var diff = end.line - start.line; + var lines = Math.abs(diff) - max; + var reason; - return matches + if (lines > 0) { + reason = + 'Remove ' + + lines + + ' ' + + pluralize('line', Math.abs(lines)) + + ' ' + + (diff > 0 ? 'before' : 'after') + + ' node'; - function matches() { - var index = -1; + file.message(reason, end); + } + } - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true + function visitChild(child, index, all) { + var previous = all[index - 1]; + var max = 2; + + if (previous && !unistUtilGenerated(previous) && !unistUtilGenerated(child)) { + if ( + (previous.type === 'list' && child.type === 'list') || + (child.type === 'code' && previous.type === 'list' && !child.lang) + ) { + max++; } - } - return false + compare(unistUtilPosition.end(previous), unistUtilPosition.start(child), max); + } } } -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$y(test) { - return type +var remarkLintNoFileNameArticles = unifiedLintRule('remark-lint:no-file-name-articles', noFileNameArticles); - function type(node) { - return Boolean(node && node.type === test) - } -} +function noFileNameArticles(tree, file) { + var match = file.stem && file.stem.match(/^(the|teh|an?)\b/i); -// Utility to return true. -function ok$z() { - return true + if (match) { + file.message('Do not start file names with `' + match[0] + '`'); + } } -var unistUtilVisitParents$y = visitParents$y; - +var remarkLintNoFileNameConsecutiveDashes = unifiedLintRule( + 'remark-lint:no-file-name-consecutive-dashes', + noFileNameConsecutiveDashes +); +var reason$b = 'Do not use consecutive dashes in a file name'; -var CONTINUE$14 = true; -var SKIP$14 = 'skip'; -var EXIT$14 = false; +function noFileNameConsecutiveDashes(tree, file) { + if (file.stem && /-{2,}/.test(file.stem)) { + file.message(reason$b); + } +} -visitParents$y.CONTINUE = CONTINUE$14; -visitParents$y.SKIP = SKIP$14; -visitParents$y.EXIT = EXIT$14; +var remarkLintNoFileNameOuterDashes = unifiedLintRule( + 'remark-lint:no-file-name-outer-dashes', + noFileNameOuterDashes +); -function visitParents$y(tree, test, visitor, reverse) { - var is; +var reason$c = 'Do not use initial or final dashes in a file name'; - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; +function noFileNameOuterDashes(tree, file) { + if (file.stem && /^-|-$/.test(file.stem)) { + file.message(reason$c); } +} - is = convert_1$y(test); +var remarkLintNoHeadingIndent = unifiedLintRule('remark-lint:no-heading-indent', noHeadingIndent); - one(tree, null, []); +var start$e = unistUtilPosition.start; - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; +function noHeadingIndent(tree, file) { + var contents = String(file); + var length = contents.length; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$y(visitor(node, parents)); + unistUtilVisit(tree, 'heading', visitor); - if (result[0] === EXIT$14) { - return result - } - } + function visitor(node) { + var initial; + var begin; + var index; + var character; + var diff; - if (node.children && result[0] !== SKIP$14) { - subresult = toResult$y(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$14 ? subresult : result + if (unistUtilGenerated(node)) { + return } - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; + initial = start$e(node); + begin = initial.offset; + index = begin - 1; - while (index > min && index < children.length) { - result = one(children[index], index, parents); + while (++index < length) { + character = contents.charAt(index); - if (result[0] === EXIT$14) { - return result + if (character !== ' ' && character !== '\t') { + break } - - index = typeof result[1] === 'number' ? result[1] : index + step; } - } -} -function toResult$y(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } + diff = index - begin; - if (typeof value === 'number') { - return [CONTINUE$14, value] + if (diff) { + file.message( + 'Remove ' + diff + ' ' + pluralize('space', diff) + ' before this heading', + { + line: initial.line, + column: initial.column + diff + } + ); + } } - - return [value] } -var unistUtilVisit$y = visit$y; - +var start$f = unistUtilPosition.start; -var CONTINUE$15 = unistUtilVisitParents$y.CONTINUE; -var SKIP$15 = unistUtilVisitParents$y.SKIP; -var EXIT$15 = unistUtilVisitParents$y.EXIT; -visit$y.CONTINUE = CONTINUE$15; -visit$y.SKIP = SKIP$15; -visit$y.EXIT = EXIT$15; +var remarkLintNoMultipleToplevelHeadings = unifiedLintRule( + 'remark-lint:no-multiple-toplevel-headings', + noMultipleToplevelHeadings +); -function visit$y(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } +function noMultipleToplevelHeadings(tree, file, option) { + var preferred = option || 1; + var duplicate; - unistUtilVisitParents$y(tree, test, overload, reverse); + unistUtilVisit(tree, 'heading', visitor); - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + function visitor(node) { + if (!unistUtilGenerated(node) && node.depth === preferred) { + if (duplicate) { + file.message( + 'Don’t use multiple top level headings (' + duplicate + ')', + node + ); + } else { + duplicate = unistUtilStringifyPosition(start$f(node)); + } + } } } -var rule = unifiedLintRule; - - - +var remarkLintNoShellDollars = unifiedLintRule('remark-lint:no-shell-dollars', noShellDollars); -var remarkLintRuleStyle = rule('remark-lint:rule-style', ruleStyle); +var reason$d = 'Do not use dollar signs before shell commands'; -var start$h = unistUtilPosition.start; -var end$9 = unistUtilPosition.end; +// List of shell script file extensions (also used as code flags for syntax +// highlighting on GitHub): +// See: +var flags = [ + 'sh', + 'bash', + 'bats', + 'cgi', + 'command', + 'fcgi', + 'ksh', + 'tmux', + 'tool', + 'zsh' +]; -function ruleStyle(tree, file, option) { - var contents = String(file); - var preferred = - typeof option === 'string' && option !== 'consistent' ? option : null; +function noShellDollars(tree, file) { + unistUtilVisit(tree, 'code', visitor); - if (preferred !== null && /[^-_* ]/.test(preferred)) { - file.fail( - "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" - ); - } + function visitor(node) { + var lines; + var line; + var length; + var index; - unistUtilVisit$y(tree, 'thematicBreak', visitor); + // Check both known shell code and unknown code. + if (!unistUtilGenerated(node) && node.lang && flags.indexOf(node.lang) !== -1) { + lines = node.value.split('\n').filter(notEmpty); + length = lines.length; + index = -1; - function visitor(node) { - var initial = start$h(node).offset; - var final = end$9(node).offset; - var rule; + if (length === 0) { + return + } - if (!unistUtilGenerated(node)) { - rule = contents.slice(initial, final); + while (++index < length) { + line = lines[index]; - if (preferred) { - if (rule !== preferred) { - file.message('Rules should use `' + preferred + '`', node); + if (line.trim() && !line.match(/^\s*\$\s*/)) { + return } - } else { - preferred = rule; } + + file.message(reason$d, node); } } -} -var convert_1$z = convert$C; - -function convert$C(test) { - if (typeof test === 'string') { - return typeFactory$z(test) + function notEmpty(line) { + return line.trim().length !== 0 } +} - if (test === null || test === undefined) { - return ok$A - } +var remarkLintNoTableIndentation = unifiedLintRule('remark-lint:no-table-indentation', noTableIndentation); - if (typeof test === 'object') { - return ('length' in test ? anyFactory$z : matchesFactory$z)(test) - } +var reason$e = 'Do not indent table rows'; - if (typeof test === 'function') { - return test - } +function noTableIndentation(tree, file) { + var contents = String(file); - throw new Error('Expected function, string, or object as test') -} + unistUtilVisit(tree, 'table', visitor); -function convertAll$z(tests) { - var results = []; - var length = tests.length; - var index = -1; + function visitor(node) { + if (!unistUtilGenerated(node)) { + node.children.forEach(each); + } - while (++index < length) { - results[index] = convert$C(tests[index]); + return unistUtilVisit.SKIP } - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$z(test) { - return matches - - function matches(node) { - var key; + function each(row) { + var fence = contents.slice( + unistUtilPosition.start(row).offset, + unistUtilPosition.start(row.children[0]).offset + ); - for (key in test) { - if (node[key] !== test[key]) { - return false - } + if (fence.indexOf('|') > 1) { + file.message(reason$e, row); } - - return true } } -function anyFactory$z(tests) { - var checks = convertAll$z(tests); - var length = checks.length; - - return matches +var remarkLintNoTabs = unifiedLintRule('remark-lint:no-tabs', noTabs); - function matches() { - var index = -1; +var reason$f = 'Use spaces instead of tabs'; - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } +function noTabs(tree, file) { + var content = String(file); + var position = vfileLocation(file).toPosition; + var index = content.indexOf('\t'); - return false + while (index !== -1) { + file.message(reason$f, position(index)); + index = content.indexOf('\t', index + 1); } } -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$z(test) { - return type +var remarkLintNoTrailingSpaces = unifiedLintRule('remark-lint:no-trailing-spaces', noTrailingSpaces); - function type(node) { - return Boolean(node && node.type === test) +/** + * Lines that are just space characters are not present in + * the AST, which is why we loop through lines manually. + */ + +function noTrailingSpaces(ast, file) { + var lines = file.toString().split(/\r?\n/); + for (var i = 0; i < lines.length; i++) { + var currentLine = lines[i]; + var lineIndex = i + 1; + if (/\s$/.test(currentLine)) { + file.message('Remove trailing whitespace', { + position: { + start: { line: lineIndex, column: currentLine.length + 1 }, + end: { line: lineIndex } + } + }); + } } } -// Utility to return true. -function ok$A() { - return true -} +var escapeStringRegexp$1 = string => { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } -var unistUtilVisitParents$z = visitParents$z; + // Escape characters with special meaning either inside or outside character sets. + // Use a simple backslash escape when it’s always valid, and a \unnnn escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar. + return string + .replace(/[|\\{}()[\]^$+*?.]/g, '\\$&') + .replace(/-/g, '\\x2d'); +}; + +const start$g = unistUtilPosition.start; +var remarkLintProhibitedStrings = unifiedLintRule('remark-lint:prohibited-strings', prohibitedStrings); +function testProhibited (val, content) { + let regexpFlags = 'g'; + let no = val.no; -var CONTINUE$16 = true; -var SKIP$16 = 'skip'; -var EXIT$16 = false; + if (!no) { + no = escapeStringRegexp$1(val.yes); + regexpFlags += 'i'; + } -visitParents$z.CONTINUE = CONTINUE$16; -visitParents$z.SKIP = SKIP$16; -visitParents$z.EXIT = EXIT$16; + let regexpString = '(? min && index < children.length) { - result = one(children[index], index, parents); + function checkText (node) { + const content = node.value; + const initial = start$g(node).offset; - if (result[0] === EXIT$16) { - return result + strings.forEach((val) => { + const results = testProhibited(val, content); + if (results.length) { + results.forEach(({ result, index }) => { + const message = val.yes ? `Use "${val.yes}" instead of "${result}"` : `Do not use "${result}"`; + file.message(message, { + start: location.toPosition(initial + index), + end: location.toPosition(initial + index + [...result].length) + }); + }); } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } + }); } } -function toResult$z(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$16, value] - } +var rule = unifiedLintRule; - return [value] -} -var unistUtilVisit$z = visit$z; +var remarkLintRuleStyle = rule('remark-lint:rule-style', ruleStyle); -var CONTINUE$17 = unistUtilVisitParents$z.CONTINUE; -var SKIP$17 = unistUtilVisitParents$z.SKIP; -var EXIT$17 = unistUtilVisitParents$z.EXIT; +var start$h = unistUtilPosition.start; +var end$9 = unistUtilPosition.end; -visit$z.CONTINUE = CONTINUE$17; -visit$z.SKIP = SKIP$17; -visit$z.EXIT = EXIT$17; +function ruleStyle(tree, file, option) { + var contents = String(file); + var preferred = + typeof option === 'string' && option !== 'consistent' ? option : null; -function visit$z(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; + if (preferred !== null && /[^-_* ]/.test(preferred)) { + file.fail( + "Incorrect preferred rule style: provide a correct markdown rule or `'consistent'`" + ); } - unistUtilVisitParents$z(tree, test, overload, reverse); + unistUtilVisit(tree, 'thematicBreak', visitor); - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) + function visitor(node) { + var initial = start$h(node).offset; + var final = end$9(node).offset; + var rule; + + if (!unistUtilGenerated(node)) { + rule = contents.slice(initial, final); + + if (preferred) { + if (rule !== preferred) { + file.message('Rules should use `' + preferred + '`', node); + } + } else { + preferred = rule; + } + } } } @@ -54156,7 +46916,7 @@ function strongMarker(tree, file, option) { ); } - unistUtilVisit$z(tree, 'strong', visitor); + unistUtilVisit(tree, 'strong', visitor); function visitor(node) { var marker = contents.charAt(unistUtilPosition.start(node).offset); @@ -54176,197 +46936,6 @@ function strongMarker(tree, file, option) { } } -var convert_1$A = convert$D; - -function convert$D(test) { - if (typeof test === 'string') { - return typeFactory$A(test) - } - - if (test === null || test === undefined) { - return ok$B - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$A : matchesFactory$A)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$A(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$D(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$A(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$A(tests) { - var checks = convertAll$A(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$A(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$B() { - return true -} - -var unistUtilVisitParents$A = visitParents$A; - - - -var CONTINUE$18 = true; -var SKIP$18 = 'skip'; -var EXIT$18 = false; - -visitParents$A.CONTINUE = CONTINUE$18; -visitParents$A.SKIP = SKIP$18; -visitParents$A.EXIT = EXIT$18; - -function visitParents$A(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$A(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$A(visitor(node, parents)); - - if (result[0] === EXIT$18) { - return result - } - } - - if (node.children && result[0] !== SKIP$18) { - subresult = toResult$A(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$18 ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$18) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$A(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$18, value] - } - - return [value] -} - -var unistUtilVisit$A = visit$A; - - - -var CONTINUE$19 = unistUtilVisitParents$A.CONTINUE; -var SKIP$19 = unistUtilVisitParents$A.SKIP; -var EXIT$19 = unistUtilVisitParents$A.EXIT; - -visit$A.CONTINUE = CONTINUE$19; -visit$A.SKIP = SKIP$19; -visit$A.EXIT = EXIT$19; - -function visit$A(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$A(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - var remarkLintTableCellPadding = unifiedLintRule('remark-lint:table-cell-padding', tableCellPadding); var start$i = unistUtilPosition.start; @@ -54387,7 +46956,7 @@ function tableCellPadding(tree, file, option) { ); } - unistUtilVisit$A(tree, 'table', visitor); + unistUtilVisit(tree, 'table', visitor); function visitor(node) { var rows = node.children; @@ -54460,7 +47029,7 @@ function tableCellPadding(tree, file, option) { checkSide('end', entry, style, sizes); } - return unistUtilVisit$A.SKIP + return unistUtilVisit.SKIP } function checkSide(side, entry, style, sizes) { @@ -54503,197 +47072,6 @@ function size(node) { return end$a(node).offset - start$i(node).offset } -var convert_1$B = convert$E; - -function convert$E(test) { - if (typeof test === 'string') { - return typeFactory$B(test) - } - - if (test === null || test === undefined) { - return ok$C - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$B : matchesFactory$B)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$B(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$E(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$B(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$B(tests) { - var checks = convertAll$B(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$B(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$C() { - return true -} - -var unistUtilVisitParents$B = visitParents$B; - - - -var CONTINUE$1a = true; -var SKIP$1a = 'skip'; -var EXIT$1a = false; - -visitParents$B.CONTINUE = CONTINUE$1a; -visitParents$B.SKIP = SKIP$1a; -visitParents$B.EXIT = EXIT$1a; - -function visitParents$B(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$B(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$B(visitor(node, parents)); - - if (result[0] === EXIT$1a) { - return result - } - } - - if (node.children && result[0] !== SKIP$1a) { - subresult = toResult$B(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$1a ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$1a) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$B(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$1a, value] - } - - return [value] -} - -var unistUtilVisit$B = visit$B; - - - -var CONTINUE$1b = unistUtilVisitParents$B.CONTINUE; -var SKIP$1b = unistUtilVisitParents$B.SKIP; -var EXIT$1b = unistUtilVisitParents$B.EXIT; - -visit$B.CONTINUE = CONTINUE$1b; -visit$B.SKIP = SKIP$1b; -visit$B.EXIT = EXIT$1b; - -function visit$B(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$B(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - var remarkLintTablePipes = unifiedLintRule('remark-lint:table-pipes', tablePipes); var start$j = unistUtilPosition.start; @@ -54705,7 +47083,7 @@ var reasonEnd = 'Missing final pipe in table fence'; function tablePipes(tree, file) { var contents = String(file); - unistUtilVisit$B(tree, 'table', visitor); + unistUtilVisit(tree, 'table', visitor); function visitor(node) { var rows = node.children; @@ -54740,197 +47118,6 @@ function tablePipes(tree, file) { } } -var convert_1$C = convert$F; - -function convert$F(test) { - if (typeof test === 'string') { - return typeFactory$C(test) - } - - if (test === null || test === undefined) { - return ok$D - } - - if (typeof test === 'object') { - return ('length' in test ? anyFactory$C : matchesFactory$C)(test) - } - - if (typeof test === 'function') { - return test - } - - throw new Error('Expected function, string, or object as test') -} - -function convertAll$C(tests) { - var results = []; - var length = tests.length; - var index = -1; - - while (++index < length) { - results[index] = convert$F(tests[index]); - } - - return results -} - -// Utility assert each property in `test` is represented in `node`, and each -// values are strictly equal. -function matchesFactory$C(test) { - return matches - - function matches(node) { - var key; - - for (key in test) { - if (node[key] !== test[key]) { - return false - } - } - - return true - } -} - -function anyFactory$C(tests) { - var checks = convertAll$C(tests); - var length = checks.length; - - return matches - - function matches() { - var index = -1; - - while (++index < length) { - if (checks[index].apply(this, arguments)) { - return true - } - } - - return false - } -} - -// Utility to convert a string into a function which checks a given node’s type -// for said string. -function typeFactory$C(test) { - return type - - function type(node) { - return Boolean(node && node.type === test) - } -} - -// Utility to return true. -function ok$D() { - return true -} - -var unistUtilVisitParents$C = visitParents$C; - - - -var CONTINUE$1c = true; -var SKIP$1c = 'skip'; -var EXIT$1c = false; - -visitParents$C.CONTINUE = CONTINUE$1c; -visitParents$C.SKIP = SKIP$1c; -visitParents$C.EXIT = EXIT$1c; - -function visitParents$C(tree, test, visitor, reverse) { - var is; - - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - is = convert_1$C(test); - - one(tree, null, []); - - // Visit a single node. - function one(node, index, parents) { - var result = []; - var subresult; - - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$C(visitor(node, parents)); - - if (result[0] === EXIT$1c) { - return result - } - } - - if (node.children && result[0] !== SKIP$1c) { - subresult = toResult$C(all(node.children, parents.concat(node))); - return subresult[0] === EXIT$1c ? subresult : result - } - - return result - } - - // Visit children in `parent`. - function all(children, parents) { - var min = -1; - var step = reverse ? -1 : 1; - var index = (reverse ? children.length : min) + step; - var result; - - while (index > min && index < children.length) { - result = one(children[index], index, parents); - - if (result[0] === EXIT$1c) { - return result - } - - index = typeof result[1] === 'number' ? result[1] : index + step; - } - } -} - -function toResult$C(value) { - if (value !== null && typeof value === 'object' && 'length' in value) { - return value - } - - if (typeof value === 'number') { - return [CONTINUE$1c, value] - } - - return [value] -} - -var unistUtilVisit$C = visit$C; - - - -var CONTINUE$1d = unistUtilVisitParents$C.CONTINUE; -var SKIP$1d = unistUtilVisitParents$C.SKIP; -var EXIT$1d = unistUtilVisitParents$C.EXIT; - -visit$C.CONTINUE = CONTINUE$1d; -visit$C.SKIP = SKIP$1d; -visit$C.EXIT = EXIT$1d; - -function visit$C(tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - - unistUtilVisitParents$C(tree, test, overload, reverse); - - function overload(node, parents) { - var parent = parents[parents.length - 1]; - var index = parent ? parent.children.indexOf(node) : null; - return visitor(node, index, parent) - } -} - var remarkLintUnorderedListMarkerStyle = unifiedLintRule( 'remark-lint:unordered-list-marker-style', unorderedListMarkerStyle @@ -54958,7 +47145,7 @@ function unorderedListMarkerStyle(tree, file, option) { ); } - unistUtilVisit$C(tree, 'list', visitor); + unistUtilVisit(tree, 'list', visitor); function visitor(node) { var children = node.children; diff --git a/tools/node-lint-md-cli-rollup/package-lock.json b/tools/node-lint-md-cli-rollup/package-lock.json index efd36027c65c22..660d0802ca277b 100644 --- a/tools/node-lint-md-cli-rollup/package-lock.json +++ b/tools/node-lint-md-cli-rollup/package-lock.json @@ -856,32 +856,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-checkbox-character-style": { @@ -894,37 +868,6 @@ "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-lint-checkbox-content-indent": { @@ -937,37 +880,6 @@ "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-lint-code-block-style": { @@ -979,32 +891,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-definition-spacing": { @@ -1016,32 +902,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-fenced-code-flag": { @@ -1053,32 +913,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-fenced-code-marker": { @@ -1090,32 +924,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-file-extension": { @@ -1135,32 +943,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-final-newline": { @@ -1179,32 +961,6 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-hard-break-spaces": { @@ -1216,32 +972,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-heading-style": { @@ -1253,32 +983,6 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-list-item-bullet-indent": { @@ -1291,32 +995,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-list-item-indent": { @@ -1329,32 +1007,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-maximum-line-length": { @@ -1366,32 +1018,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-auto-link-without-protocol": { @@ -1404,32 +1030,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-blockquote-without-marker": { @@ -1442,37 +1042,6 @@ "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0", "vfile-location": "^3.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-lint-no-consecutive-blank-lines": { @@ -1485,32 +1054,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-duplicate-definitions": { @@ -1523,32 +1066,6 @@ "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-file-name-articles": { @@ -1586,32 +1103,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-heading-indent": { @@ -1624,32 +1115,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-inline-padding": { @@ -1661,32 +1126,6 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-literal-urls": { @@ -1699,32 +1138,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-multiple-toplevel-headings": { @@ -1737,68 +1150,16 @@ "unist-util-position": "^3.0.0", "unist-util-stringify-position": "^2.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-shell-dollars": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-2.0.0.tgz", - "integrity": "sha512-1uEM0kSGlV6UY7w3PdIeIf/USFFvVuU1352myQdaiw/Wof7+uVXznFFCPnhJDTVlPN4vrgwFnLb32UwXrjkrQw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-2.0.1.tgz", + "integrity": "sha512-N+wOq3nmZ8WnCreWhi/rfIKQJPAz+pcbErQATcnQzH0znzldXlX8Ovlm54yDx/A+TmGMex/epkCwuiewIj9m4g==", "requires": { "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-shortcut-reference-image": { @@ -1809,32 +1170,6 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-shortcut-reference-link": { @@ -1845,32 +1180,6 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-table-indentation": { @@ -1882,32 +1191,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-tabs": { @@ -1917,13 +1200,6 @@ "requires": { "unified-lint-rule": "^1.0.0", "vfile-location": "^3.0.0" - }, - "dependencies": { - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-lint-no-trailing-spaces": { @@ -1943,111 +1219,33 @@ "unified-lint-rule": "^1.0.0", "unist-util-generated": "^1.1.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-no-unused-definitions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-2.0.0.tgz", "integrity": "sha512-Y8zrulwaf7z6WR1ICfEGjW92iq2SPEN7Zhrs0nloNITHOg22tIPf28TurUz9HSQ3sEd52d9bZCfW9RkdfMq1xw==", - "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "remark-lint-ordered-list-marker-style": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-2.0.0.tgz", - "integrity": "sha512-zYMZA8tQD/slJYKqsstZv0/Q34Hkdlf4DjC8SOr92PSA60R/xr7JdVd/AHHisbMsFvdnHZrxaB8oIOtbAUJCSw==", - "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-generated": "^1.1.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } + "requires": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-lint-ordered-list-marker-style": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-2.0.0.tgz", + "integrity": "sha512-zYMZA8tQD/slJYKqsstZv0/Q34Hkdlf4DjC8SOr92PSA60R/xr7JdVd/AHHisbMsFvdnHZrxaB8oIOtbAUJCSw==", + "requires": { + "unified-lint-rule": "^1.0.0", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" } }, "remark-lint-prohibited-strings": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-1.5.1.tgz", - "integrity": "sha512-YZoRWbzIGRIQkngAowwAKG39kUAGSalYvrxqTzUU4LYj1dS37q7i5WDr4m/mnCcc5KwRin08D62Dphs6g9Btnw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-1.5.2.tgz", + "integrity": "sha512-1+WIHboeLxmAnlxTFW6XNfvxvhnC2WRxn0rGgcNp/M7CrANHhnadY2/YeXFLF9oY22SAylrxiPG9eAuUmJuW6w==", "requires": { "escape-string-regexp": "^4.0.0", "unified-lint-rule": "^1.0.2", @@ -2060,35 +1258,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" } } }, @@ -2101,32 +1270,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-strong-marker": { @@ -2138,32 +1281,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-table-cell-padding": { @@ -2175,32 +1292,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-table-pipes": { @@ -2212,32 +1303,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-lint-unordered-list-marker-style": { @@ -2249,32 +1314,6 @@ "unist-util-generated": "^1.1.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } } }, "remark-message-control": { @@ -2310,9 +1349,9 @@ } }, "remark-preset-lint-node": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-1.15.0.tgz", - "integrity": "sha512-1G7S2F/u7bk3kc4tZPrUphceP0RfT9AF6e+gzWbNi8URutECe3kl+Ur6ooMI5f1VqJUzcLF/U1YuhnFhkPnKkA==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-1.15.1.tgz", + "integrity": "sha512-jRWBKCEkLGObhlgmlth0w78vxLKxvJYnkpqLvkl5AAatytv9kHjc4fN/dfUX2rj1KFYr/xC4KG/MM68gKQNJ0w==", "requires": { "remark-lint": "^7.0.0", "remark-lint-blockquote-indentation": "^2.0.0", @@ -2338,70 +1377,13 @@ "remark-lint-no-table-indentation": "^2.0.0", "remark-lint-no-tabs": "^2.0.0", "remark-lint-no-trailing-spaces": "^2.0.1", - "remark-lint-prohibited-strings": "^1.5.1", + "remark-lint-prohibited-strings": "^1.5.2", "remark-lint-rule-style": "^2.0.0", "remark-lint-strong-marker": "^2.0.0", "remark-lint-table-cell-padding": "^2.0.0", "remark-lint-table-pipes": "^2.0.0", "remark-lint-unordered-list-marker-style": "^2.0.0", "remark-preset-lint-recommended": "^4.0.0" - }, - "dependencies": { - "remark-lint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-7.0.0.tgz", - "integrity": "sha512-OLrWPYy0MUcGLa/2rjuy1kQILTRRK+JiRtyUzqe4XRoHboGuvFDcy/W2e7sq5hu/0xmD+Eh7cEa1Coiqp7LeaA==", - "requires": { - "remark-message-control": "^6.0.0" - } - }, - "remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", - "requires": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" - } - }, - "unified-message-control": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.1.tgz", - "integrity": "sha512-K2Kvvp1DBzeuxYLLsumZh/gDWUTl4e2z/P3VReFirC78cfHKtQifbhnfRrSBtKtd1Uc6cvYTW0/SZIUaMAEcTg==", - "requires": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" - } - }, - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-preset-lint-recommended": { @@ -2425,63 +1407,6 @@ "remark-lint-no-undefined-references": "^2.0.0", "remark-lint-no-unused-definitions": "^2.0.0", "remark-lint-ordered-list-marker-style": "^2.0.0" - }, - "dependencies": { - "remark-lint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-7.0.0.tgz", - "integrity": "sha512-OLrWPYy0MUcGLa/2rjuy1kQILTRRK+JiRtyUzqe4XRoHboGuvFDcy/W2e7sq5hu/0xmD+Eh7cEa1Coiqp7LeaA==", - "requires": { - "remark-message-control": "^6.0.0" - } - }, - "remark-message-control": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-6.0.0.tgz", - "integrity": "sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==", - "requires": { - "mdast-comment-marker": "^1.0.0", - "unified-message-control": "^3.0.0" - } - }, - "unified-message-control": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-3.0.1.tgz", - "integrity": "sha512-K2Kvvp1DBzeuxYLLsumZh/gDWUTl4e2z/P3VReFirC78cfHKtQifbhnfRrSBtKtd1Uc6cvYTW0/SZIUaMAEcTg==", - "requires": { - "unist-util-visit": "^2.0.0", - "vfile-location": "^3.0.0" - } - }, - "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" - }, - "unist-util-visit": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.2.tgz", - "integrity": "sha512-HoHNhGnKj6y+Sq+7ASo2zpVdfdRifhTgX2KTU3B/sO/TTlZchp7E3S4vjRzDJ7L60KmrCPsQkVK3lEF3cz36XQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz", - "integrity": "sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==" - } } }, "remark-stringify": { diff --git a/tools/node-lint-md-cli-rollup/package.json b/tools/node-lint-md-cli-rollup/package.json index aa203f67b33217..ee03028112bc92 100644 --- a/tools/node-lint-md-cli-rollup/package.json +++ b/tools/node-lint-md-cli-rollup/package.json @@ -13,7 +13,7 @@ "markdown-extensions": "^1.1.1", "remark": "^12.0.0", "remark-lint": "^7.0.0", - "remark-preset-lint-node": "^1.15.0", + "remark-preset-lint-node": "^1.15.1", "unified-args": "^8.0.0" }, "main": "dist/index.js",