From 552642a498c1f8d430b02e186238b5b20ae0d10b Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 19 Apr 2024 09:49:58 -0700 Subject: [PATCH] tools: update lint-md-dependencies remark-preset-lint-node@5.0.2 rollup@4.14.3 PR-URL: https://github.com/nodejs/node/pull/52581 Reviewed-By: Moshe Atlow Reviewed-By: Mohammed Keyvanzadeh Reviewed-By: Luigi Pinca --- tools/lint-md/lint-md.mjs | 14859 ++++++++++++------------------ tools/lint-md/package-lock.json | 5969 +++--------- tools/lint-md/package.json | 4 +- 3 files changed, 7028 insertions(+), 13804 deletions(-) diff --git a/tools/lint-md/lint-md.mjs b/tools/lint-md/lint-md.mjs index f768c6cf3c4fec..3f433622517c4c 100644 --- a/tools/lint-md/lint-md.mjs +++ b/tools/lint-md/lint-md.mjs @@ -105,7 +105,7 @@ var extend$1 = function extend() { }; var extend$2 = getDefaultExportFromCjs(extend$1); -function ok$B() {} +function ok$1() {} function isPlainObject(value) { if (typeof value !== 'object' || value === null) { @@ -195,32 +195,32 @@ function wrap(middleware, callback) { } } -function stringifyPosition$2(value) { +function stringifyPosition(value) { if (!value || typeof value !== 'object') { return '' } if ('position' in value || 'type' in value) { - return position$2(value.position) + return position$1(value.position) } if ('start' in value || 'end' in value) { - return position$2(value) + return position$1(value) } if ('line' in value || 'column' in value) { - return point$4(value) + return point$2(value) } return '' } -function point$4(point) { - return index$2(point && point.line) + ':' + index$2(point && point.column) +function point$2(point) { + return index(point && point.line) + ':' + index(point && point.column) } -function position$2(pos) { - return point$4(pos && pos.start) + '-' + point$4(pos && pos.end) +function position$1(pos) { + return point$2(pos && pos.start) + '-' + point$2(pos && pos.end) } -function index$2(value) { +function index(value) { return value && typeof value === 'number' ? value : 1 } -let VFileMessage$1 = class VFileMessage extends Error { +class VFileMessage extends Error { constructor(causeOrReason, optionsOrParentOrPlace, origin) { super(); if (typeof optionsOrParentOrPlace === 'string') { @@ -287,7 +287,7 @@ let VFileMessage$1 = class VFileMessage extends Error { this.file; this.message = reason; this.line = start ? start.line : undefined; - this.name = stringifyPosition$2(options.place) || '1:1'; + this.name = stringifyPosition(options.place) || '1:1'; this.place = options.place || undefined; this.reason = this.message; this.ruleId = options.ruleId || undefined; @@ -301,22 +301,22 @@ let VFileMessage$1 = class VFileMessage extends Error { this.note; this.url; } -}; -VFileMessage$1.prototype.file = ''; -VFileMessage$1.prototype.name = ''; -VFileMessage$1.prototype.reason = ''; -VFileMessage$1.prototype.message = ''; -VFileMessage$1.prototype.stack = ''; -VFileMessage$1.prototype.column = undefined; -VFileMessage$1.prototype.line = undefined; -VFileMessage$1.prototype.ancestors = undefined; -VFileMessage$1.prototype.cause = undefined; -VFileMessage$1.prototype.fatal = undefined; -VFileMessage$1.prototype.place = undefined; -VFileMessage$1.prototype.ruleId = undefined; -VFileMessage$1.prototype.source = undefined; +} +VFileMessage.prototype.file = ''; +VFileMessage.prototype.name = ''; +VFileMessage.prototype.reason = ''; +VFileMessage.prototype.message = ''; +VFileMessage.prototype.stack = ''; +VFileMessage.prototype.column = undefined; +VFileMessage.prototype.line = undefined; +VFileMessage.prototype.ancestors = undefined; +VFileMessage.prototype.cause = undefined; +VFileMessage.prototype.fatal = undefined; +VFileMessage.prototype.place = undefined; +VFileMessage.prototype.ruleId = undefined; +VFileMessage.prototype.source = undefined; -function isUrl$1(fileUrlOrPath) { +function isUrl(fileUrlOrPath) { return Boolean( fileUrlOrPath !== null && typeof fileUrlOrPath === 'object' && @@ -328,7 +328,7 @@ function isUrl$1(fileUrlOrPath) { ) } -const order$1 = ([ +const order = ([ 'history', 'path', 'basename', @@ -336,14 +336,14 @@ const order$1 = ([ 'extname', 'dirname' ]); -let VFile$1 = class VFile { +class VFile { constructor(value) { let options; if (!value) { options = {}; - } else if (isUrl$1(value)) { + } else if (isUrl(value)) { options = {path: value}; - } else if (typeof value === 'string' || isUint8Array$3(value)) { + } else if (typeof value === 'string' || isUint8Array$2(value)) { options = {value}; } else { options = value; @@ -357,8 +357,8 @@ let VFile$1 = class VFile { this.result; this.stored; let index = -1; - while (++index < order$1.length) { - const prop = order$1[index]; + while (++index < order.length) { + const prop = order[index]; if ( prop in options && options[prop] !== undefined && @@ -369,7 +369,7 @@ let VFile$1 = class VFile { } let prop; for (prop in options) { - if (!order$1.includes(prop)) { + if (!order.includes(prop)) { this[prop] = options[prop]; } } @@ -378,23 +378,23 @@ let VFile$1 = class VFile { return typeof this.path === 'string' ? path$1.basename(this.path) : undefined } set basename(basename) { - assertNonEmpty$1(basename, 'basename'); - assertPart$1(basename, 'basename'); + assertNonEmpty(basename, 'basename'); + assertPart(basename, 'basename'); this.path = path$1.join(this.dirname || '', basename); } get dirname() { return typeof this.path === 'string' ? path$1.dirname(this.path) : undefined } set dirname(dirname) { - assertPath$1(this.basename, 'dirname'); + assertPath(this.basename, 'dirname'); this.path = path$1.join(dirname || '', this.basename); } get extname() { return typeof this.path === 'string' ? path$1.extname(this.path) : undefined } set extname(extname) { - assertPart$1(extname, 'extname'); - assertPath$1(this.dirname, 'extname'); + assertPart(extname, 'extname'); + assertPath(this.dirname, 'extname'); if (extname) { if (extname.codePointAt(0) !== 46 ) { throw new Error('`extname` must start with `.`') @@ -409,10 +409,10 @@ let VFile$1 = class VFile { return this.history[this.history.length - 1] } set path(path) { - if (isUrl$1(path)) { + if (isUrl(path)) { path = fileURLToPath(path); } - assertNonEmpty$1(path, 'path'); + assertNonEmpty(path, 'path'); if (this.path !== path) { this.history.push(path); } @@ -423,8 +423,8 @@ let VFile$1 = class VFile { : undefined } set stem(stem) { - assertNonEmpty$1(stem, 'stem'); - assertPart$1(stem, 'stem'); + assertNonEmpty(stem, 'stem'); + assertPart(stem, 'stem'); this.path = path$1.join(this.dirname || '', stem + (this.extname || '')); } fail(causeOrReason, optionsOrParentOrPlace, origin) { @@ -438,7 +438,7 @@ let VFile$1 = class VFile { return message } message(causeOrReason, optionsOrParentOrPlace, origin) { - const message = new VFileMessage$1( + const message = new VFileMessage( causeOrReason, optionsOrParentOrPlace, origin @@ -461,25 +461,25 @@ let VFile$1 = class VFile { const decoder = new TextDecoder(encoding || undefined); return decoder.decode(this.value) } -}; -function assertPart$1(part, name) { +} +function assertPart(part, name) { if (part && part.includes(path$1.sep)) { throw new Error( '`' + name + '` cannot be a path: did not expect `' + path$1.sep + '`' ) } } -function assertNonEmpty$1(part, name) { +function assertNonEmpty(part, name) { if (!part) { throw new Error('`' + name + '` cannot be empty') } } -function assertPath$1(path, name) { +function assertPath(path, name) { if (!path) { throw new Error('Setting `' + name + '` requires `path` to be set too') } } -function isUint8Array$3(value) { +function isUint8Array$2(value) { return Boolean( value && typeof value === 'object' && @@ -512,7 +512,7 @@ const CallableInstance = ) ); -const own$6 = {}.hasOwnProperty; +const own$5 = {}.hasOwnProperty; class Processor extends CallableInstance { constructor() { super('copy'); @@ -546,7 +546,7 @@ class Processor extends CallableInstance { this.namespace[key] = value; return this } - return (own$6.call(this.namespace, key) && this.namespace[key]) || undefined + return (own$5.call(this.namespace, key) && this.namespace[key]) || undefined } if (key) { assertUnfrozen('data', this.frozen); @@ -794,7 +794,7 @@ function assertDone(name, asyncName, complete) { } } function vfile(value) { - return looksLikeAVFile$1(value) ? value : new VFile$1(value) + return looksLikeAVFile$1(value) ? value : new VFile(value) } function looksLikeAVFile$1(value) { return Boolean( @@ -805,9 +805,9 @@ function looksLikeAVFile$1(value) { ) } function looksLikeAValue(value) { - return typeof value === 'string' || isUint8Array$2(value) + return typeof value === 'string' || isUint8Array$1(value) } -function isUint8Array$2(value) { +function isUint8Array$1(value) { return Boolean( value && typeof value === 'object' && @@ -816,19 +816,19 @@ function isUint8Array$2(value) { ) } -const emptyOptions$3 = {}; -function toString$2(value, options) { - const settings = options || emptyOptions$3; +const emptyOptions$2 = {}; +function toString(value, options) { + const settings = options || emptyOptions$2; const includeImageAlt = typeof settings.includeImageAlt === 'boolean' ? settings.includeImageAlt : true; const includeHtml = typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true; - return one$2(value, includeImageAlt, includeHtml) + return one(value, includeImageAlt, includeHtml) } -function one$2(value, includeImageAlt, includeHtml) { - if (node$2(value)) { +function one(value, includeImageAlt, includeHtml) { + if (node(value)) { if ('value' in value) { return value.type === 'html' && !includeHtml ? '' : value.value } @@ -836,23 +836,23 @@ function one$2(value, includeImageAlt, includeHtml) { return value.alt } if ('children' in value) { - return all$2(value.children, includeImageAlt, includeHtml) + return all(value.children, includeImageAlt, includeHtml) } } if (Array.isArray(value)) { - return all$2(value, includeImageAlt, includeHtml) + return all(value, includeImageAlt, includeHtml) } return '' } -function all$2(values, includeImageAlt, includeHtml) { +function all(values, includeImageAlt, includeHtml) { const result = []; let index = -1; while (++index < values.length) { - result[index] = one$2(values[index], includeImageAlt, includeHtml); + result[index] = one(values[index], includeImageAlt, includeHtml); } return result.join('') } -function node$2(value) { +function node(value) { return Boolean(value && typeof value === 'object') } @@ -2984,9 +2984,9 @@ const characterEntities = { zwnj: '‌' }; -const own$5 = {}.hasOwnProperty; +const own$4 = {}.hasOwnProperty; function decodeNamedCharacterReference(value) { - return own$5.call(characterEntities, value) ? characterEntities[value] : false + return own$4.call(characterEntities, value) ? characterEntities[value] : false } function splice(list, start, remove, items) { @@ -3073,7 +3073,7 @@ function decodeNumericCharacterReference(value, base) { return String.fromCodePoint(code); } -function normalizeIdentifier$1(value) { +function normalizeIdentifier(value) { return ( value .replace(/[\t\n\r ]+/g, ' ') @@ -4262,7 +4262,86 @@ function tokenizeCodeText(effects, ok, nok) { } } -function subtokenize(events) { +class SpliceBuffer { + constructor(initial) { + this.left = initial ? [...initial] : []; + this.right = []; + } + get(index) { + if (index < 0 || index >= this.left.length + this.right.length) { + throw new RangeError('Cannot access index `' + index + '` in a splice buffer of size `' + (this.left.length + this.right.length) + '`'); + } + if (index < this.left.length) return this.left[index]; + return this.right[this.right.length - index + this.left.length - 1]; + } + get length() { + return this.left.length + this.right.length; + } + shift() { + this.setCursor(0); + return this.right.pop(); + } + slice(start, end) { + const stop = end === null || end === undefined ? Number.POSITIVE_INFINITY : end; + if (stop < this.left.length) { + return this.left.slice(start, stop); + } + if (start > this.left.length) { + return this.right.slice(this.right.length - stop + this.left.length, this.right.length - start + this.left.length).reverse(); + } + return this.left.slice(start).concat(this.right.slice(this.right.length - stop + this.left.length).reverse()); + } + splice(start, deleteCount, items) { + const count = deleteCount || 0; + this.setCursor(Math.trunc(start)); + const removed = this.right.splice(this.right.length - count, Number.POSITIVE_INFINITY); + if (items) chunkedPush(this.left, items); + return removed.reverse(); + } + pop() { + this.setCursor(Number.POSITIVE_INFINITY); + return this.left.pop(); + } + push(item) { + this.setCursor(Number.POSITIVE_INFINITY); + this.left.push(item); + } + pushMany(items) { + this.setCursor(Number.POSITIVE_INFINITY); + chunkedPush(this.left, items); + } + unshift(item) { + this.setCursor(0); + this.right.push(item); + } + unshiftMany(items) { + this.setCursor(0); + chunkedPush(this.right, items.reverse()); + } + setCursor(n) { + if (n === this.left.length || n > this.left.length && this.right.length === 0 || n < 0 && this.left.length === 0) return; + if (n < this.left.length) { + const removed = this.left.splice(n, Number.POSITIVE_INFINITY); + chunkedPush(this.right, removed.reverse()); + } else { + const removed = this.right.splice(this.left.length + this.right.length - n, Number.POSITIVE_INFINITY); + chunkedPush(this.left, removed.reverse()); + } + } +} +function chunkedPush(list, right) { + let chunkStart = 0; + if (right.length < 10000) { + list.push(...right); + } else { + while (chunkStart < right.length) { + list.push(...right.slice(chunkStart, chunkStart + 10000)); + chunkStart += 10000; + } + } +} + +function subtokenize(eventsArray) { const jumps = {}; let index = -1; let event; @@ -4272,33 +4351,24 @@ function subtokenize(events) { let parameters; let subevents; let more; + const events = new SpliceBuffer(eventsArray); while (++index < events.length) { while (index in jumps) { index = jumps[index]; } - event = events[index]; - if ( - index && - event[1].type === 'chunkFlow' && - events[index - 1][1].type === 'listItemPrefix' - ) { + event = events.get(index); + if (index && event[1].type === "chunkFlow" && events.get(index - 1)[1].type === "listItemPrefix") { subevents = event[1]._tokenizer.events; otherIndex = 0; - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'lineEndingBlank' - ) { + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") { otherIndex += 2; } - if ( - otherIndex < subevents.length && - subevents[otherIndex][1].type === 'content' - ) { + if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") { while (++otherIndex < subevents.length) { - if (subevents[otherIndex][1].type === 'content') { - break + if (subevents[otherIndex][1].type === "content") { + break; } - if (subevents[otherIndex][1].type === 'chunkText') { + if (subevents[otherIndex][1].type === "chunkText") { subevents[otherIndex][1]._isInFirstContentOfListItem = true; otherIndex++; } @@ -4316,39 +4386,36 @@ function subtokenize(events) { otherIndex = index; lineIndex = undefined; while (otherIndex--) { - otherEvent = events[otherIndex]; - if ( - otherEvent[1].type === 'lineEnding' || - otherEvent[1].type === 'lineEndingBlank' - ) { + otherEvent = events.get(otherIndex); + if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") { if (otherEvent[0] === 'enter') { if (lineIndex) { - events[lineIndex][1].type = 'lineEndingBlank'; + events.get(lineIndex)[1].type = "lineEndingBlank"; } - otherEvent[1].type = 'lineEnding'; + otherEvent[1].type = "lineEnding"; lineIndex = otherIndex; } } else { - break + break; } } if (lineIndex) { - event[1].end = Object.assign({}, events[lineIndex][1].start); + event[1].end = Object.assign({}, events.get(lineIndex)[1].start); parameters = events.slice(lineIndex, index); parameters.unshift(event); - splice(events, lineIndex, index - lineIndex + 1, parameters); + events.splice(lineIndex, index - lineIndex + 1, parameters); } } } - return !more + splice(eventsArray, 0, Number.POSITIVE_INFINITY, events.slice(0)); + return !more; } function subcontent(events, eventIndex) { - const token = events[eventIndex][1]; - const context = events[eventIndex][2]; + const token = events.get(eventIndex)[1]; + const context = events.get(eventIndex)[2]; let startPosition = eventIndex - 1; const startPositions = []; - const tokenizer = - token._tokenizer || context.parser[token.contentType](token.start); + const tokenizer = token._tokenizer || context.parser[token.contentType](token.start); const childEvents = tokenizer.events; const jumps = []; const gaps = {}; @@ -4360,7 +4427,7 @@ function subcontent(events, eventIndex) { let start = 0; const breaks = [start]; while (current) { - while (events[++startPosition][1] !== current) { + while (events.get(++startPosition)[1] !== current) { } startPositions.push(startPosition); if (!current._tokenizer) { @@ -4385,11 +4452,7 @@ function subcontent(events, eventIndex) { current = token; while (++index < childEvents.length) { if ( - childEvents[index][0] === 'exit' && - childEvents[index - 1][0] === 'enter' && - childEvents[index][1].type === childEvents[index - 1][1].type && - childEvents[index][1].start.line !== childEvents[index][1].end.line - ) { + childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) { start = index + 1; breaks.push(start); current._tokenizer = undefined; @@ -4408,15 +4471,16 @@ function subcontent(events, eventIndex) { while (index--) { const slice = childEvents.slice(breaks[index], breaks[index + 1]); const start = startPositions.pop(); - jumps.unshift([start, start + slice.length - 1]); - splice(events, start, 2, slice); + jumps.push([start, start + slice.length - 1]); + events.splice(start, 2, slice); } + jumps.reverse(); index = -1; while (++index < jumps.length) { gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]; adjust += jumps[index][1] - jumps[index][0] - 1; } - return gaps + return gaps; } const content = { @@ -4782,7 +4846,7 @@ function tokenizeDefinition(effects, ok, nok) { )(code) } function labelAfter(code) { - identifier = normalizeIdentifier$1( + identifier = normalizeIdentifier( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ); if (code === 58) { @@ -5927,7 +5991,7 @@ function tokenizeLabelEnd(effects, ok, nok) { return labelEndNok(code) } defined = self.parser.defined.includes( - normalizeIdentifier$1( + normalizeIdentifier( self.sliceSerialize({ start: labelStart.end, end: self.now() @@ -6056,7 +6120,7 @@ function tokenizeReferenceFull(effects, ok, nok) { } function referenceFullAfter(code) { return self.parser.defined.includes( - normalizeIdentifier$1( + normalizeIdentifier( self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1) ) ) @@ -7059,7 +7123,7 @@ var defaultConstructs = /*#__PURE__*/Object.freeze({ text: text$2 }); -function parse$1(options) { +function parse$2(options) { const settings = options || {}; const constructs = combineExtensions([defaultConstructs, ...(settings.extensions || [])]); @@ -7088,7 +7152,7 @@ function postprocess(events) { return events } -const search = /[\0\t\n\r]/g; +const search$1 = /[\0\t\n\r]/g; function preprocess() { let column = 1; let buffer = ''; @@ -7116,8 +7180,8 @@ function preprocess() { start = undefined; } while (startPosition < value.length) { - search.lastIndex = startPosition; - match = search.exec(value); + search$1.lastIndex = startPosition; + match = search$1.exec(value); endPosition = match && match.index !== undefined ? match.index : value.length; code = value.charCodeAt(endPosition); @@ -7189,7 +7253,7 @@ function decode($0, $1, $2) { return decodeNamedCharacterReference($2) || $0 } -const own$4 = {}.hasOwnProperty; +const own$3 = {}.hasOwnProperty; function fromMarkdown(value, encoding, options) { if (typeof encoding !== 'string') { options = encoding; @@ -7197,7 +7261,7 @@ function fromMarkdown(value, encoding, options) { } return compiler(options)( postprocess( - parse$1(options).document().write(preprocess()(value, encoding, true)) + parse$2(options).document().write(preprocess()(value, encoding, true)) ) ) } @@ -7335,7 +7399,7 @@ function compiler(options) { index = -1; while (++index < events.length) { const handler = config[events[index][0]]; - if (own$4.call(handler, events[index][1].type)) { + if (own$3.call(handler, events[index][1].type)) { handler[events[index][1].type].call( Object.assign( { @@ -7353,7 +7417,7 @@ function compiler(options) { handler.call(context, undefined, tail[0]); } tree.position = { - start: point$3( + start: point$1( events.length > 0 ? events[0][1].start : { @@ -7362,7 +7426,7 @@ function compiler(options) { offset: 0 } ), - end: point$3( + end: point$1( events.length > 0 ? events[events.length - 2][1].end : { @@ -7513,7 +7577,7 @@ function compiler(options) { this.stack.push(node); this.tokenStack.push([token, errorHandler]); node.position = { - start: point$3(token.start), + start: point$1(token.start), end: undefined }; } @@ -7532,7 +7596,7 @@ function compiler(options) { 'Cannot close `' + token.type + '` (' + - stringifyPosition$2({ + stringifyPosition({ start: token.start, end: token.end }) + @@ -7546,10 +7610,10 @@ function compiler(options) { handler.call(this, token, open[0]); } } - node.position.end = point$3(token.end); + node.position.end = point$1(token.end); } function resume() { - return toString$2(this.stack.pop()) + return toString(this.stack.pop()) } function onenterlistordered() { this.data.expectingFirstListItemValue = true; @@ -7591,7 +7655,7 @@ function compiler(options) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; node.label = label; - node.identifier = normalizeIdentifier$1( + node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); } @@ -7629,7 +7693,7 @@ function compiler(options) { if (!tail || tail.type !== 'text') { tail = text(); tail.position = { - start: point$3(token.start), + start: point$1(token.start), end: undefined }; siblings.push(tail); @@ -7639,13 +7703,13 @@ function compiler(options) { function onexitdata(token) { const tail = this.stack.pop(); tail.value += this.sliceSerialize(token); - tail.position.end = point$3(token.end); + tail.position.end = point$1(token.end); } function onexitlineending(token) { const context = this.stack[this.stack.length - 1]; if (this.data.atHardBreak) { const tail = context.children[context.children.length - 1]; - tail.position.end = point$3(token.end); + tail.position.end = point$1(token.end); this.data.atHardBreak = undefined; return } @@ -7707,7 +7771,7 @@ function compiler(options) { const string = this.sliceSerialize(token); const ancestor = this.stack[this.stack.length - 2]; ancestor.label = decodeString(string); - ancestor.identifier = normalizeIdentifier$1(string).toLowerCase(); + ancestor.identifier = normalizeIdentifier(string).toLowerCase(); } function onexitlabel() { const fragment = this.stack[this.stack.length - 1]; @@ -7741,7 +7805,7 @@ function compiler(options) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; node.label = label; - node.identifier = normalizeIdentifier$1( + node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); this.data.referenceType = 'full'; @@ -7765,7 +7829,7 @@ function compiler(options) { } const tail = this.stack.pop(); tail.value += value; - tail.position.end = point$3(token.end); + tail.position.end = point$1(token.end); } function onexitautolinkprotocol(token) { onexitdata.call(this, token); @@ -7887,7 +7951,7 @@ function compiler(options) { } } } -function point$3(d) { +function point$1(d) { return { line: d.line, column: d.column, @@ -7908,7 +7972,7 @@ function configure$1(combined, extensions) { function extension(combined, extension) { let key; for (key in extension) { - if (own$4.call(extension, key)) { + if (own$3.call(extension, key)) { switch (key) { case 'canContainEols': { const right = extension[key]; @@ -7942,14 +8006,14 @@ function defaultOnError(left, right) { 'Cannot close `' + left.type + '` (' + - stringifyPosition$2({ + stringifyPosition({ start: left.start, end: left.end }) + '): a different token (`' + right.type + '`, ' + - stringifyPosition$2({ + stringifyPosition({ start: right.start, end: right.end }) + @@ -7960,7 +8024,7 @@ function defaultOnError(left, right) { 'Cannot close document, a token (`' + right.type + '`, ' + - stringifyPosition$2({ + stringifyPosition({ start: right.start, end: right.end }) + @@ -7982,15 +8046,15 @@ function remarkParse(options) { } } -const own$3 = {}.hasOwnProperty; +const own$2 = {}.hasOwnProperty; function zwitch(key, options) { const settings = options || {}; function one(value, ...parameters) { let fn = one.invalid; const handlers = one.handlers; - if (value && own$3.call(value, key)) { + if (value && own$2.call(value, key)) { const id = String(value[key]); - fn = own$3.call(handlers, id) ? handlers[id] : one.unknown; + fn = own$2.call(handlers, id) ? handlers[id] : one.unknown; } if (fn) { return fn.call(this, value, ...parameters) @@ -8002,7 +8066,7 @@ function zwitch(key, options) { return one } -const own$2 = {}.hasOwnProperty; +const own$1 = {}.hasOwnProperty; function configure(base, extension) { let index = -1; let key; @@ -8012,7 +8076,7 @@ function configure(base, extension) { } } for (key in extension) { - if (own$2.call(extension, key)) { + if (own$1.call(extension, key)) { switch (key) { case 'extensions': { break @@ -8294,31 +8358,31 @@ function emphasisPeek(_, _1, state) { return state.options.emphasis || '*' } -const convert$A = +const convert = ( function (test) { if (test === null || test === undefined) { - return ok$A + return ok } if (typeof test === 'function') { - return castFactory$A(test) + return castFactory(test) } if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$A(test) : propsFactory$A(test) + return Array.isArray(test) ? anyFactory(test) : propsFactory(test) } if (typeof test === 'string') { - return typeFactory$A(test) + return typeFactory(test) } throw new Error('Expected function, string, or object as test') } ); -function anyFactory$A(tests) { +function anyFactory(tests) { const checks = []; let index = -1; while (++index < tests.length) { - checks[index] = convert$A(tests[index]); + checks[index] = convert(tests[index]); } - return castFactory$A(any) + return castFactory(any) function any(...parameters) { let index = -1; while (++index < checks.length) { @@ -8327,9 +8391,9 @@ function anyFactory$A(tests) { return false } } -function propsFactory$A(check) { +function propsFactory(check) { const checkAsRecord = (check); - return castFactory$A(all) + return castFactory(all) function all(node) { const nodeAsRecord = ( (node) @@ -8341,13 +8405,13 @@ function propsFactory$A(check) { return true } } -function typeFactory$A(check) { - return castFactory$A(type) +function typeFactory(check) { + return castFactory(type) function type(node) { return node && node.type === check } } -function castFactory$A(testFunction) { +function castFactory(testFunction) { return check function check(value, index, parent) { return Boolean( @@ -8361,22 +8425,22 @@ function castFactory$A(testFunction) { ) } } -function ok$A() { +function ok() { return true } function looksLikeANode(value) { return value !== null && typeof value === 'object' && 'type' in value } -function color$B(d) { +function color$1(d) { return '\u001B[33m' + d + '\u001B[39m' } -const empty = []; -const CONTINUE$A = true; -const EXIT$A = false; -const SKIP$A = 'skip'; -function visitParents$A(tree, test, visitor, reverse) { +const empty$1 = []; +const CONTINUE = true; +const EXIT = false; +const SKIP = 'skip'; +function visitParents(tree, test, visitor, reverse) { let check; if (typeof test === 'function' && typeof visitor !== 'function') { reverse = visitor; @@ -8384,7 +8448,7 @@ function visitParents$A(tree, test, visitor, reverse) { } else { check = test; } - const is = convert$A(check); + const is = convert(check); const step = reverse ? -1 : 1; factory(tree, undefined, [])(); function factory(node, index, parents) { @@ -8401,30 +8465,30 @@ function visitParents$A(tree, test, visitor, reverse) { : undefined; Object.defineProperty(visit, 'name', { value: - 'node (' + color$B(node.type + (name ? '<' + name + '>' : '')) + ')' + 'node (' + color$1(node.type + (name ? '<' + name + '>' : '')) + ')' }); } return visit function visit() { - let result = empty; + let result = empty$1; let subresult; let offset; let grandparents; if (!test || is(node, index, parents[parents.length - 1] || undefined)) { - result = toResult$A(visitor(node, parents)); - if (result[0] === EXIT$A) { + result = toResult(visitor(node, parents)); + if (result[0] === EXIT) { return result } } if ('children' in node && node.children) { const nodeAsParent = (node); - if (nodeAsParent.children && result[0] !== SKIP$A) { + if (nodeAsParent.children && result[0] !== SKIP) { offset = (reverse ? nodeAsParent.children.length : -1) + step; grandparents = parents.concat(nodeAsParent); while (offset > -1 && offset < nodeAsParent.children.length) { const child = nodeAsParent.children[offset]; subresult = factory(child, offset, grandparents)(); - if (subresult[0] === EXIT$A) { + if (subresult[0] === EXIT) { return subresult } offset = @@ -8436,17 +8500,17 @@ function visitParents$A(tree, test, visitor, reverse) { } } } -function toResult$A(value) { +function toResult(value) { if (Array.isArray(value)) { return value } if (typeof value === 'number') { - return [CONTINUE$A, value] + return [CONTINUE, value] } - return value === null || value === undefined ? empty : [value] + return value === null || value === undefined ? empty$1 : [value] } -function visit$A(tree, testOrVisitor, visitorOrReverse, maybeReverse) { +function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) { let reverse; let test; let visitor; @@ -8462,7 +8526,7 @@ function visit$A(tree, testOrVisitor, visitorOrReverse, maybeReverse) { visitor = visitorOrReverse; reverse = maybeReverse; } - visitParents$A(tree, test, overload, reverse); + visitParents(tree, test, overload, reverse); function overload(node, parents) { const parent = parents[parents.length - 1]; const index = parent ? parent.children.indexOf(node) : undefined; @@ -8472,18 +8536,18 @@ function visit$A(tree, testOrVisitor, visitorOrReverse, maybeReverse) { function formatHeadingAsSetext(node, state) { let literalWithBreak = false; - visit$A(node, function (node) { + visit(node, function (node) { if ( ('value' in node && /\r?\n|\r/.test(node.value)) || node.type === 'break' ) { literalWithBreak = true; - return EXIT$A + return EXIT } }); return Boolean( (!node.depth || node.depth < 3) && - toString$2(node) && + toString(node) && (state.options.setext || literalWithBreak) ) } @@ -8535,8 +8599,8 @@ function heading(node, _, state, info) { return value } -html.peek = htmlPeek; -function html(node) { +html$1.peek = htmlPeek; +function html$1(node) { return node.value || '' } function htmlPeek() { @@ -8673,7 +8737,7 @@ function inlineCodePeek() { } function formatLinkAsAutolink(node, state) { - const raw = toString$2(node); + const raw = toString(node); return Boolean( !state.options.resourceLink && node.url && @@ -8981,7 +9045,7 @@ function paragraph(node, _, state, info) { const phrasing = ( - convert$A([ + convert([ 'break', 'delete', 'emphasis', @@ -9073,7 +9137,7 @@ const handle = { emphasis, hardBreak, heading, - html, + html: html$1, image, imageReference, inlineCode, @@ -9577,11 +9641,11 @@ function escapeStringRegexp(string) { function findAndReplace(tree, list, options) { const settings = options || {}; - const ignored = convert$A(settings.ignore || []); + const ignored = convert(settings.ignore || []); const pairs = toPairs(list); let pairIndex = -1; while (++pairIndex < pairs.length) { - visitParents$A(tree, 'text', visitor); + visitParents(tree, 'text', visitor); } function visitor(node, parents) { let index = -1; @@ -9744,7 +9808,7 @@ function exitLiteralAutolinkHttp(token) { function exitLiteralAutolinkWww(token) { this.config.exit.data.call(this, token); const node = this.stack[this.stack.length - 1]; - ok$B(node.type === 'link'); + ok$1(node.type === 'link'); node.url = 'http://' + this.sliceSerialize(token); } function exitLiteralAutolinkEmail(token) { @@ -9881,9 +9945,9 @@ function enterFootnoteDefinitionLabelString() { function exitFootnoteDefinitionLabelString(token) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; - ok$B(node.type === 'footnoteDefinition'); + ok$1(node.type === 'footnoteDefinition'); node.label = label; - node.identifier = normalizeIdentifier$1( + node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); } @@ -9899,9 +9963,9 @@ function enterFootnoteCallString() { function exitFootnoteCallString(token) { const label = this.resume(); const node = this.stack[this.stack.length - 1]; - ok$B(node.type === 'footnoteReference'); + ok$1(node.type === 'footnoteReference'); node.label = label; - node.identifier = normalizeIdentifier$1( + node.identifier = normalizeIdentifier( this.sliceSerialize(token) ).toLowerCase(); } @@ -10218,7 +10282,7 @@ function exitCodeText(token) { value = value.replace(/\\([\\|])/g, replace); } const node = this.stack[this.stack.length - 1]; - ok$B(node.type === 'inlineCode'); + ok$1(node.type === 'inlineCode'); node.value = value; this.exit(token); } @@ -10323,7 +10387,7 @@ function gfmTaskListItemToMarkdown() { } function exitCheck(token) { const node = this.stack[this.stack.length - 2]; - ok$B(node.type === 'listItem'); + ok$1(node.type === 'listItem'); node.checked = token.type === 'taskListCheckValueChecked'; } function exitParagraphWithTaskListItem(token) { @@ -10334,7 +10398,7 @@ function exitParagraphWithTaskListItem(token) { typeof parent.checked === 'boolean' ) { const node = this.stack[this.stack.length - 1]; - ok$B(node.type === 'paragraph'); + ok$1(node.type === 'paragraph'); const head = node.children[0]; if (head && head.type === 'text') { const siblings = parent.children; @@ -10889,7 +10953,7 @@ function tokenizePotentialGfmFootnoteCall(effects, ok, nok) { if (!labelStart || !labelStart._balanced) { return nok(code) } - const id = normalizeIdentifier$1( + const id = normalizeIdentifier( self.sliceSerialize({ start: labelStart.end, end: self.now() @@ -10995,7 +11059,7 @@ function tokenizeGfmFootnoteCall(effects, ok, nok) { if (code === 93) { effects.exit('chunkString'); const token = effects.exit('gfmFootnoteCallString'); - if (!defined.includes(normalizeIdentifier$1(self.sliceSerialize(token)))) { + if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) { return nok(code) } effects.enter('gfmFootnoteCallLabelMarker'); @@ -11059,7 +11123,7 @@ function tokenizeDefinitionStart(effects, ok, nok) { if (code === 93) { effects.exit('chunkString'); const token = effects.exit('gfmFootnoteDefinitionLabelString'); - identifier = normalizeIdentifier$1(self.sliceSerialize(token)); + identifier = normalizeIdentifier(self.sliceSerialize(token)); effects.enter('gfmFootnoteDefinitionLabelMarker'); effects.consume(code); effects.exit('gfmFootnoteDefinitionLabelMarker'); @@ -11846,10 +11910,10 @@ function gfm(options) { ]) } -const emptyOptions$2 = {}; +const emptyOptions$1 = {}; function remarkGfm(options) { const self = (this); - const settings = options || emptyOptions$2; + const settings = options || emptyOptions$1; const data = self.data(); const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []); @@ -11862,10 +11926,74 @@ function remarkGfm(options) { toMarkdownExtensions.push(gfmToMarkdown(settings)); } +const commentExpression = /\s*([a-zA-Z\d-]+)(\s+([\s\S]*))?\s*/; +const esCommentExpression = new RegExp( + '(\\s*\\/\\*' + commentExpression.source + '\\*\\/\\s*)' +); +const markerExpression = new RegExp( + '(\\s*\\s*)' +); +function commentMarker(value) { + if ( + isNode(value) && + (value.type === 'html' || + value.type === 'mdxFlowExpression' || + value.type === 'mdxTextExpression') + ) { + const match = value.value.match( + value.type === 'html' ? markerExpression : esCommentExpression + ); + if (match && match[0].length === value.value.length) { + const parameters = parseParameters(match[3] || ''); + if (parameters) { + return { + name: match[2], + attributes: (match[4] || '').trim(), + parameters, + node: value + } + } + } + } +} +function parseParameters(value) { + const parameters = {}; + return value + .replace( + /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])*)"|'((?:\\[\s\S]|[^'])*)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, + replacer + ) + .replace(/\s+/g, '') + ? undefined + : parameters + function replacer(_, $1, $2, $3, $4) { + let value = $2 === undefined ? ($3 === undefined ? $4 : $3) : $2; + const number = Number(value); + if (value === 'true' || value === undefined) { + value = true; + } else if (value === 'false') { + value = false; + } else if (value.trim() && !Number.isNaN(number)) { + value = number; + } + parameters[$1] = value; + return '' + } +} +function isNode(value) { + return Boolean(value && typeof value === 'object' && 'type' in value) +} + +function parse$1(value) { + const input = String(value || '').trim(); + return input ? input.split(/[ \t\n\r\f]+/g) : [] +} + +const search = /\r?\n|\r/g; function location(file) { const value = String(file); const indices = []; - const search = /\r?\n|\r/g; + search.lastIndex = 0; while (search.test(value)) { indices.push(search.lastIndex); } @@ -11888,7 +12016,6 @@ function location(file) { } } } - return {line: undefined, column: undefined, offset: undefined} } function toOffset(point) { const line = point && point.line; @@ -11905,345 +12032,181 @@ function location(file) { return offset } } - return -1 } } -const convert$z = - ( - function (test) { - if (test === undefined || test === null) { - return ok$z - } - if (typeof test === 'string') { - return typeFactory$z(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$z(test) : propsFactory$z(test) - } - if (typeof test === 'function') { - return castFactory$z(test) +const own = {}.hasOwnProperty; +function messageControl(tree, options) { + if (!options || typeof options !== 'object') { + throw new Error('Expected `options`') + } + const {file, marker, name, test} = options; + let {enable, disable, known, reset, source} = options; + if (!enable) enable = []; + if (!disable) disable = []; + if (!file) { + throw new Error('Expected `file` in `options`') + } + if (!marker) { + throw new Error('Expected `marker` in `options`') + } + if (!name) { + throw new Error('Expected `name` in `options`') + } + const sources = typeof source === 'string' ? [source] : source || [name]; + const toOffset = location(file).toOffset; + const initial = !reset; + const gaps = detectGaps(tree); + const scope = {}; + const globals = []; + visit(tree, test, visitor); + file.messages = file.messages.filter(function (m) { + return filter(m) + }); + function visitor(node, position, parent) { + const point = node.position && node.position.start; + const mark = marker(node); + if (!point || !mark || mark.name !== name) { + return + } + const ruleIds = parse$1(mark.attributes); + const verb = ruleIds.shift(); + const fn = + verb === 'enable' + ? doEnable + : verb === 'disable' + ? doDisable + : verb === 'ignore' + ? doIgnore + : undefined; + if (!fn) { + file.fail( + 'Unknown keyword `' + + verb + + '`: expected ' + + "`'enable'`, `'disable'`, or `'ignore'`", + node + ); + } + const next = + (parent && position !== undefined && parent.children[position + 1]) || + undefined; + const tail = next && next.position && next.position.end; + if (ruleIds.length === 0) { + fn(point, undefined, tail); + } else { + let index = -1; + while (++index < ruleIds.length) { + const ruleId = ruleIds[index]; + if (isKnown(ruleId, verb, node)) { + fn(point, ruleId, tail); + } } - throw new Error('Expected function, string, or object as test') } - ); -function anyFactory$z(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$z(tests[index]); } - return castFactory$z(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true + function doIgnore(point, ruleId, tail) { + if (tail) { + toggle(point, false, ruleId); + toggle(tail, true, ruleId); } - return false } -} -function propsFactory$z(check) { - return castFactory$z(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true + function doDisable(point, ruleId) { + toggle(point, false, ruleId); + if (!ruleId) reset = true; } -} -function typeFactory$z(check) { - return castFactory$z(type) - function type(node) { - return node && node.type === check + function doEnable(point, ruleId) { + toggle(point, true, ruleId); + if (!ruleId) reset = false; } -} -function castFactory$z(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) + function filter(message) { + let gapIndex = gaps.length; + if (!message.source || !sources.includes(message.source)) { + return true + } + if (!message.line) message.line = 1; + if (!message.column) message.column = 1; + const offset = toOffset(message); + while (gapIndex--) { + if (gaps[gapIndex][0] <= offset && gaps[gapIndex][1] > offset) { + return false + } + } + return ( + (!message.ruleId || check(message, scope[message.ruleId], true)) && + check(message, globals, false) ) } -} -function ok$z() { - return true -} - -function color$A(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$z = true; -const SKIP$z = 'skip'; -const EXIT$z = false; -const visitParents$z = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - var is = convert$z(test); - var step = reverse ? -1 : 1; - factory(tree, null, [])(); - function factory(node, index, parents) { - var value = typeof node === 'object' && node !== null ? node : {}; - var name; - if (typeof value.type === 'string') { - name = - typeof value.tagName === 'string' - ? value.tagName - : typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + - color$A(value.type + (name ? '<' + name + '>' : '')) + - ')' - }); - } - return visit - function visit() { - var result = []; - var subresult; - var offset; - var grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$z(visitor(node, parents)); - if (result[0] === EXIT$z) { - return result - } - } - if (node.children && result[0] !== SKIP$z) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$z) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result + function isKnown(ruleId, verb, node) { + const result = known ? known.includes(ruleId) : true; + if (!result) { + file.message('Cannot ' + verb + " `'" + ruleId + "'`, it’s not known", { + ancestors: [node], + place: node.position, + ruleId: 'known', + source: 'unified-message-control' + }); + } + return result + } + function getState(ruleId) { + const ranges = ruleId ? scope[ruleId] : globals; + if (ranges && ranges.length > 0) { + return ranges[ranges.length - 1].state + } + return ruleId + ? reset + ? enable.includes(ruleId) + : !disable.includes(ruleId) + : !reset + } + function toggle(point, state, ruleId) { + const markers = ruleId ? scope[ruleId] || (scope[ruleId] = []) : globals; + const current = getState(ruleId); + if (current !== state) { + markers.push({state, point}); + } + if (!ruleId) { + for (ruleId in scope) { + if (own.call(scope, ruleId)) { + toggle(point, state, ruleId); } } } - ); -function toResult$z(value) { - if (Array.isArray(value)) { - return value } - if (typeof value === 'number') { - return [CONTINUE$z, value] - } - return [value] -} - -const visit$z = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$z(tree, test, overload, reverse); - function overload(node, parents) { - var parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -const own$1 = {}.hasOwnProperty; -function messageControl(options) { - if (!options || typeof options !== 'object' || !options.name) { - throw new Error( - 'Expected `name` in `options`, got `' + (options || {}).name + '`' - ) - } - if (!options.marker) { - throw new Error( - 'Expected `marker` in `options`, got `' + options.marker + '`' - ) - } - const enable = 'enable' in options && options.enable ? options.enable : []; - const disable = 'disable' in options && options.disable ? options.disable : []; - let reset = options.reset; - const sources = - typeof options.source === 'string' - ? [options.source] - : options.source || [options.name]; - return transformer - function transformer(tree, file) { - const toOffset = location(file).toOffset; - const initial = !reset; - const gaps = detectGaps(tree, file); - const scope = {}; - const globals = []; - visit$z(tree, options.test, visitor); - file.messages = file.messages.filter((m) => filter(m)); - function visitor(node, position, parent) { - const mark = options.marker(node); - if (!mark || mark.name !== options.name) { - return - } - const ruleIds = mark.attributes.split(/\s/g); - const point = mark.node.position && mark.node.position.start; - const next = - (parent && position !== null && parent.children[position + 1]) || - undefined; - const tail = (next && next.position && next.position.end) || undefined; - let index = -1; - const verb = ruleIds.shift(); - if (verb !== 'enable' && verb !== 'disable' && verb !== 'ignore') { - file.fail( - 'Unknown keyword `' + - verb + - '`: expected ' + - "`'enable'`, `'disable'`, or `'ignore'`", - mark.node - ); - } - if (ruleIds.length > 0) { - while (++index < ruleIds.length) { - const ruleId = ruleIds[index]; - if (isKnown(ruleId, verb, mark.node)) { - toggle(point, verb === 'enable', ruleId); - if (verb === 'ignore') { - toggle(tail, true, ruleId); - } - } - } - } else if (verb === 'ignore') { - toggle(point, false); - toggle(tail, true); - } else { - toggle(point, verb === 'enable'); - reset = verb !== 'enable'; - } - } - function filter(message) { - let gapIndex = gaps.length; - if (!message.source || !sources.includes(message.source)) { - return true - } - if (!message.line) { - message.line = 1; - } - if (!message.column) { - message.column = 1; - } - const offset = toOffset(message); - while (gapIndex--) { - if (gaps[gapIndex][0] <= offset && gaps[gapIndex][1] > offset) { - return false - } - } - return ( - (!message.ruleId || - check(message, scope[message.ruleId], message.ruleId)) && - check(message, globals) - ) - } - function isKnown(ruleId, verb, node) { - const result = options.known ? options.known.includes(ruleId) : true; - if (!result) { - file.message( - 'Unknown rule: cannot ' + verb + " `'" + ruleId + "'`", - node - ); - } - return result - } - function getState(ruleId) { - const ranges = ruleId ? scope[ruleId] : globals; - if (ranges && ranges.length > 0) { - return ranges[ranges.length - 1].state - } - if (!ruleId) { - return !reset - } - return reset ? enable.includes(ruleId) : !disable.includes(ruleId) - } - function toggle(point, state, ruleId) { - let markers = ruleId ? scope[ruleId] : globals; - if (!markers) { - markers = []; - scope[String(ruleId)] = markers; - } - const previousState = getState(ruleId); - if (state !== previousState) { - markers.push({state, point}); - } - if (!ruleId) { - for (ruleId in scope) { - if (own$1.call(scope, ruleId)) { - toggle(point, state, ruleId); - } + function check(message, marks, local) { + if (message.line && message.column && marks && marks.length > 0) { + let index = marks.length; + while (index--) { + const mark = marks[index]; + if ( + mark.point && + (mark.point.line < message.line || + (mark.point.line === message.line && + mark.point.column <= message.column)) + ) { + return mark.state === true } } } - function check(message, ranges, ruleId) { - if (ranges && ranges.length > 0) { - let index = ranges.length; - while (index--) { - const range = ranges[index]; - if ( - message.line && - message.column && - range.point && - range.point.line && - range.point.column && - (range.point.line < message.line || - (range.point.line === message.line && - range.point.column <= message.column)) - ) { - return range.state === true - } - } - } - if (!ruleId) { - return Boolean(initial || reset) - } - return reset ? enable.includes(ruleId) : !disable.includes(ruleId) + if (local) { + ok$1(message.ruleId); + return reset + ? enable.includes(message.ruleId) + : !disable.includes(message.ruleId) } + return Boolean(initial || reset) } } -function detectGaps(tree, file) { - const children = tree.children || []; - const lastNode = children[children.length - 1]; - const gaps = []; +function detectGaps(tree) { + const end = + tree && tree.position && tree.position.end && tree.position.end.offset; let offset = 0; - let gap; - visit$z(tree, one); - if ( - lastNode && - lastNode.position && - lastNode.position.end && - offset === lastNode.position.end.offset && - file.toString().slice(offset).trim() !== '' - ) { + let gap = false; + const gaps = []; + visit(tree, one); + if (typeof end === 'number' && offset !== end) { update(); - update( - tree && - tree.position && - tree.position.end && - tree.position.end.offset && - tree.position.end.offset - 1 - ); + update(end); } return gaps function one(node) { @@ -12258,93 +12221,23 @@ function detectGaps(tree, file) { } else if (offset < latest) { if (gap) { gaps.push([offset, latest]); - gap = undefined; + gap = false; } offset = latest; } } } -const commentExpression = /\s*([a-zA-Z\d-]+)(\s+([\s\S]*))?\s*/; -const esCommentExpression = new RegExp( - '(\\s*\\/\\*' + commentExpression.source + '\\*\\/\\s*)' -); -const markerExpression = new RegExp( - '(\\s*\\s*)' -); -function commentMarker(value) { - if ( - isNode(value) && - (value.type === 'html' || - value.type === 'comment' || - value.type === 'mdxFlowExpression' || - value.type === 'mdxTextExpression') - ) { - let offset = 2; - let match; - if (value.type === 'comment') { - match = value.value.match(commentExpression); - offset = 1; - } else if (value.type === 'html') { - match = value.value.match(markerExpression); - } else if ( - value.type === 'mdxFlowExpression' || - value.type === 'mdxTextExpression' - ) { - match = value.value.match(esCommentExpression); - } - if (match && match[0].length === value.value.length) { - const parameters = parseParameters(match[offset + 1] || ''); - if (parameters) { - return { - name: match[offset], - attributes: (match[offset + 2] || '').trim(), - parameters, - node: value - } - } - } - } - return null -} -function parseParameters(value) { - const parameters = {}; - return value - .replace( - /\s+([-\w]+)(?:=(?:"((?:\\[\s\S]|[^"])*)"|'((?:\\[\s\S]|[^'])*)'|((?:\\[\s\S]|[^"'\s])+)))?/gi, - replacer - ) - .replace(/\s+/g, '') - ? null - : parameters - function replacer(_, $1, $2, $3, $4) { - let value = $2 === undefined ? ($3 === undefined ? $4 : $3) : $2; - const number = Number(value); - if (value === 'true' || value === undefined) { - value = true; - } else if (value === 'false') { - value = false; - } else if (value.trim() && !Number.isNaN(number)) { - value = number; - } - parameters[$1] = value; - return '' - } -} -function isNode(value) { - return Boolean(value && typeof value === 'object' && 'type' in value) -} - const test = [ - 'html', 'comment', + 'html', 'mdxFlowExpression', 'mdxTextExpression' ]; function remarkMessageControl(options) { - return messageControl( - Object.assign({marker: commentMarker, test}, options) - ) + return function (tree, file) { + messageControl(tree, {...options, file, marker: commentMarker, test}); + } } function remarkLint() { @@ -12354,7 +12247,7 @@ function lintMessageControl() { return remarkMessageControl({name: 'lint', source: 'remark-lint'}) } -function lintRule(meta, rule) { +function lintRule$1(meta, rule) { const id = typeof meta === 'string' ? meta : meta.origin; const url = typeof meta === 'string' ? undefined : meta.url; const parts = id.split(':'); @@ -12363,12 +12256,12 @@ function lintRule(meta, rule) { Object.defineProperty(plugin, 'name', {value: id}); return plugin function plugin(config) { - const [severity, options] = coerce$1(ruleId, config); - if (!severity) return + const [severity, options] = coerce$2(ruleId, config); const fatal = severity === 2; - return (tree, file, next) => { + if (!severity) return + return function (tree, file, next) { let index = file.messages.length - 1; - wrap(rule, (error) => { + wrap(rule, function (error) { const messages = file.messages; if (error && !messages.includes(error)) { try { @@ -12376,34 +12269,38 @@ function lintRule(meta, rule) { } catch {} } while (++index < messages.length) { - Object.assign(messages[index], {ruleId, source, fatal, url}); + Object.assign(messages[index], {fatal, ruleId, source, url}); } next(); })(tree, file, options); } } } -function coerce$1(name, config) { - if (!Array.isArray(config)) return [1, config] +function coerce$2(name, config) { + if (!Array.isArray(config)) { + return [1, config] + } const [severity, ...options] = config; switch (severity) { case false: - case 'off': - case 0: { + case 0: + case 'off': { return [0, ...options] } case true: + case 1: case 'on': - case 'warn': - case 1: { + case 'warn': { return [1, ...options] } - case 'error': - case 2: { + case 2: + case 'error': { return [2, ...options] } default: { - if (typeof severity !== 'number') return [1, config] + if (typeof severity !== 'number') { + return [1, config] + } throw new Error( 'Incorrect severity `' + severity + @@ -12417,35 +12314,53 @@ function coerce$1(name, config) { } /** + * remark-lint rule to warn when a final line ending is missing. + * + * ## What is this? + * + * This package checks the final line ending. + * * ## When should I use this? * - * You can use this package to check that fenced code markers are consistent. + * You can use this package to check final line endings. * * ## API * + * ### `unified().use(remarkLintFinalNewline)` + * + * Warn when a final line ending is missing. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * * Turn this rule on. - * See [StackExchange](https://unix.stackexchange.com/questions/18743) for more - * info. + * See [StackExchange][] for more info. * * ## Fix * * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) * always adds final line endings. * - * ## Example + * [api-remark-lint-final-newline]: #unifieduseremarklintfinalnewline + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * [stackexchange]: https://unix.stackexchange.com/questions/18743 + * + * ## Examples * * ##### `ok.md` * * ###### In * - * > 👉 **Note**: `␊` represents a line feed (`\n`). - * * ```markdown - * Alpha␊ + * Mercury␊ * ``` * * ###### Out @@ -12456,45 +12371,179 @@ function coerce$1(name, config) { * * ###### In * - * > 👉 **Note**: `␀` represents the end of the file. - * * ```markdown - * Bravo␀ + * Mercury␀ * ``` * * ###### Out * * ```text - * 1:1: Missing newline character at end of file + * 1:8: Unexpected missing final newline character, expected line feed (`\n`) at end of file * ``` * * @module final-newline - * @summary - * remark-lint rule to warn when files don’t end in a newline. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT */ -const remarkLintFinalNewline = lintRule( +const remarkLintFinalNewline = lintRule$1( { origin: 'remark-lint:final-newline', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-final-newline#readme' }, - (_, file) => { + function (_, file) { const value = String(file); + const end = location(file).toPoint(value.length); const last = value.length - 1; - if (last > -1 && value.charAt(last) !== '\n') { - file.message('Missing newline character at end of file'); + if ( + last !== -1 && + value.charAt(last) !== '\n' + ) { + file.message( + 'Unexpected missing final newline character, expected line feed (`\\n`) at end of file', + end + ); } } ); var remarkLintFinalNewline$1 = remarkLintFinalNewline; +const pointEnd = point('end'); +const pointStart = point('start'); +function point(type) { + return point + function point(node) { + const point = (node && node.position && node.position[type]) || {}; + if ( + typeof point.line === 'number' && + point.line > 0 && + typeof point.column === 'number' && + point.column > 0 + ) { + return { + line: point.line, + column: point.column, + offset: + typeof point.offset === 'number' && point.offset > -1 + ? point.offset + : undefined + } + } + } +} +function position(node) { + const start = pointStart(node); + const end = pointEnd(node); + if (start && end) { + return {start, end} + } +} + +/** + * remark-lint rule to warn when more spaces are used than needed + * for hard breaks. + * + * ## What is this? + * + * This package checks the whitespace of hard breaks. + * + * ## When should I use this? + * + * You can use this package to check that the number of spaces in hard breaks + * are consistent. + * + * ## API + * + * ### `unified().use(remarkLintHardBreakSpaces)` + * + * Warn when more spaces are used than needed for hard breaks. + * + * ###### Parameters + * + * There are no options. + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ## Recommendation + * + * Less than two spaces do not create a hard breaks and more than two spaces + * have no effect. + * Due to this, it’s recommended to turn this rule on. + * + * [api-remark-lint-hard-break-spaces]: #unifieduseremarklinthardbreakspaces + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module hard-break-spaces + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * @example + * {"name": "ok.md"} + * + * **Mercury** is the first planet from the Sun␠␠ + * and the smallest in the Solar System. + * + * @example + * {"label": "input", "name": "not-ok.md"} + * + * **Mercury** is the first planet from the Sun␠␠␠ + * and the smallest in the Solar System. + * @example + * {"label": "output", "name": "not-ok.md"} + * + * 1:45-2:1: Unexpected `3` spaces for hard break, expected `2` spaces + * + * @example + * {"gfm": true, "label": "input", "name": "containers.md"} + * + * [^mercury]: + * > * > * **Mercury** is the first planet from the Sun␠␠␠ + * > > and the smallest in the Solar System. + * @example + * {"gfm": true, "label": "output", "name": "containers.md"} + * + * 2:57-3:1: Unexpected `3` spaces for hard break, expected `2` spaces + */ +const remarkLintHardBreakSpaces = lintRule$1( + { + origin: 'remark-lint:hard-break-spaces', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-hard-break-spaces#readme' + }, + function (tree, file) { + const value = String(file); + visit(tree, 'break', function (node) { + const end = pointEnd(node); + const start = pointStart(node); + if ( + end && + start && + typeof end.offset === 'number' && + typeof start.offset === 'number' + ) { + const slice = value.slice(start.offset, end.offset); + let actual = 0; + while (slice.charCodeAt(actual) === 32) actual++; + if (actual > 2) { + file.message( + 'Unexpected `' + + actual + + '` spaces for hard break, expected `2` spaces', + node + ); + } + } + }); + } +); +var remarkLintHardBreakSpaces$1 = remarkLintHardBreakSpaces; + function commonjsRequire(path) { throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); } -var pluralize = {exports: {}}; +var pluralize$1 = {exports: {}}; (function (module, exports) { (function (root, pluralize) { @@ -12819,637 +12868,503 @@ var pluralize = {exports: {}}; ].forEach(pluralize.addUncountableRule); return pluralize; }); -} (pluralize)); -var pluralizeExports = pluralize.exports; -var plural = getDefaultExportFromCjs(pluralizeExports); - -const convert$y = - ( - function (test) { - if (test === undefined || test === null) { - return ok$y - } - if (typeof test === 'string') { - return typeFactory$y(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$y(test) : propsFactory$y(test) - } - if (typeof test === 'function') { - return castFactory$y(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$y(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$y(tests[index]); - } - return castFactory$y(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$y(check) { - return castFactory$y(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$y(check) { - return castFactory$y(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$y(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$y() { - return true -} - -function color$z(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$y = true; -const EXIT$y = false; -const SKIP$y = 'skip'; -const visitParents$y = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$y(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$z(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$y(visitor(node, parents)); - if (result[0] === EXIT$y) { - return result - } - } - if (node.children && result[0] !== SKIP$y) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$y) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$y(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$y, value] - } - return [value] -} - -const visit$y = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$y(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +} (pluralize$1)); +var pluralizeExports = pluralize$1.exports; +var pluralize = getDefaultExportFromCjs(pluralizeExports); /** + * remark-lint rule to warn when list item markers are indented. + * + * ## What is this? + * + * This package checks indentation before list item markers. + * * ## When should I use this? * - * You can use this package to check that list items are not indented. + * You can use this package to check that the style of list items is + * consistent. * * ## API * + * ### `unified().use(remarkLintListItemBulletIndent)` + * + * Warn when list item markers are indented. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * - * There is no specific handling of indented list items (or anything else) in - * markdown. + * There is no specific handling of indented list items in markdown. * While it is possible to use an indent to align ordered lists on their marker: * * ```markdown - * 1. One - * 10. Ten - * 100. Hundred + * 1. Mercury + * 10. Venus + * 100. Earth * ``` * - * …such a style is uncommon and a bit hard to maintain: adding a 10th item - * means 9 other items have to change (more arduous, while unlikely, would be + * …such a style is uncommon and hard to maintain as adding a 10th item + * means 9 other items have to change (more arduous while unlikely would be * the 100th item). - * Hence, it’s recommended to not indent items and to turn this rule on. + * So it is recommended to not indent items and to turn this rule on. * * ## Fix * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats all items without indent. + * [`remark-stringify`][github-remark-stringify] formats all items without + * indent. + * + * [api-remark-lint-list-item-bullet-indent]: #unifieduseremarklintlistitembulletindent + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * * @module list-item-bullet-indent - * @summary - * remark-lint rule to warn when list items are indented. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT * @example * {"name": "ok.md"} * - * Paragraph. + * Mercury. * - * * List item - * * List item + * * Venus. + * * Earth. * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * Paragraph. + * Mercury. * - * ·* List item - * ·* List item + * ␠* Venus. + * ␠* Earth. * * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "output", "name": "not-ok.md"} * - * 3:2: Incorrect indentation before bullet: remove 1 space - * 4:2: Incorrect indentation before bullet: remove 1 space + * 3:2: Unexpected `1` space before list item, expected `0` spaces, remove them + * 4:2: Unexpected `1` space before list item, expected `0` spaces, remove them */ -const remarkLintListItemBulletIndent = lintRule( +const remarkLintListItemBulletIndent = lintRule$1( { origin: 'remark-lint:list-item-bullet-indent', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-bullet-indent#readme' }, - (tree, file) => { - visit$y(tree, 'list', (list, _, grandparent) => { - let index = -1; - while (++index < list.children.length) { - const item = list.children[index]; - if ( - grandparent && - grandparent.type === 'root' && - grandparent.position && - typeof grandparent.position.start.column === 'number' && - item.position && - typeof item.position.start.column === 'number' - ) { - const indent = - item.position.start.column - grandparent.position.start.column; - if (indent) { - file.message( - 'Incorrect indentation before bullet: remove ' + - indent + - ' ' + - plural('space', indent), - item.position.start - ); - } + function (tree, file) { + const treeStart = pointStart(tree); + if (!tree || tree.type !== 'root' || !treeStart) return + for (const child of tree.children) { + if (child.type !== 'list') continue + const list = child; + for (const item of list.children) { + const place = pointStart(item); + if (!place) continue + const actual = place.column - treeStart.column; + if (actual) { + file.message( + 'Unexpected `' + + actual + + '` ' + + pluralize('space', actual) + + ' before list item, expected `0` spaces, remove them', + {ancestors: [tree, list, item], place} + ); } } - }); + } } ); var remarkLintListItemBulletIndent$1 = remarkLintListItemBulletIndent; -const convert$x = - ( - function (test) { - if (test === undefined || test === null) { - return ok$x - } - if (typeof test === 'string') { - return typeFactory$x(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$x(test) : propsFactory$x(test) - } - if (typeof test === 'function') { - return castFactory$x(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$x(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$x(tests[index]); - } - return castFactory$x(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$x(check) { - return castFactory$x(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$x(check) { - return castFactory$x(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$x(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$x() { - return true -} - -function color$y(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$x = true; -const EXIT$x = false; -const SKIP$x = 'skip'; -const visitParents$x = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$x(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$y(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$x(visitor(node, parents)); - if (result[0] === EXIT$x) { - return result - } - } - if (node.children && result[0] !== SKIP$x) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$x) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$x(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$x, value] - } - return [value] -} - -const visit$x = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$x(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -const pointStart = point$2('start'); -const pointEnd = point$2('end'); -function point$2(type) { - return point - function point(node) { - const point = (node && node.position && node.position[type]) || {}; - return { - line: point.line || null, - column: point.column || null, - offset: point.offset > -1 ? point.offset : null - } - } -} - -function generated(node) { - return ( - !node || - !node.position || - !node.position.start || - !node.position.start.line || - !node.position.start.column || - !node.position.end || - !node.position.end.line || - !node.position.end.column - ) -} - /** + * remark-lint rule to warn when the whitespace after list item markers violate + * a given style. + * + * ## What is this? + * + * This package checks the style of whitespace after list item markers. + * * ## When should I use this? * - * You can use this package to check that the spacing between list item markers - * and content is inconsistent. + * You can use this package to check that the style of whitespace after list + * item markers and before content is consistent. * * ## API * - * The following options (default: `'tab-size'`) are accepted: + * ### `unified().use(remarkLintListItemIndent[, options])` + * + * Warn when the whitespace after list item markers violate a given style. + * + * ###### Parameters + * + * * `options` ([`Options`][api-options], default: `'one'`) + * — preferred style + * + * ###### Returns * - * * `'space'` - * — prefer a single space - * * `'tab-size'` - * — prefer spaces the size of the next tab stop - * * `'mixed'` - * — prefer `'space'` for tight lists and `'tab-size'` for loose lists + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). + * + * * `'mixed'` + * — prefer `'one'` for tight lists and `'tab'` for loose lists + * * `'one'` + * — prefer the size of the bullet and a single space + * * `'tab'` + * — prefer the size of the bullet and a single space to the next tab stop + * + * ###### Type + * + * ```ts + * type Options = 'mixed' | 'one' | 'tab' + * ``` * * ## Recommendation * - * First, some background. + * First some background. * The number of spaces that occur after list markers (`*`, `-`, and `+` for - * unordered lists, or `.` and `)` for unordered lists) and before the content - * on the first line, defines how much indentation can be used for further - * lines. - * At least one space is required and up to 4 spaces are allowed (if there is no - * further content after the marker then it’s a blank line which is handled as - * if there was one space; if there are 5 or more spaces and then content, it’s - * also seen as one space and the rest is seen as indented code). - * - * There are two types of lists in markdown (other than ordered and unordered): - * tight and loose lists. + * unordered lists and `.` and `)` for unordered lists) and before the content + * on the first line, + * defines how much indentation can be used for further lines. + * At least one space is required and up to 4 spaces are allowed. + * If there is no further content after the marker then it’s a blank line which + * is handled as if there was one space. + * If there are 5 or more spaces and then content then it’s also seen as one + * space and the rest is seen as indented code. + * + * Regardless of ordered and unordered, + * there are two kinds of lists in markdown, + * tight and loose. * Lists are tight by default but if there is a blank line between two list - * items or between two blocks inside an item, that turns the whole list into a - * loose list. - * When turning markdown into HTML, paragraphs in tight lists are not wrapped - * in `

` tags. + * items or between two blocks inside an item, + * that turns the whole list into a loose list. + * When turning markdown into HTML, + * paragraphs in tight lists are not wrapped in `

` tags. * - * Historically, how indentation of lists works in markdown has been a mess, + * How indentation of lists works in markdown has historically been a mess, * especially with how they interact with indented code. - * CommonMark made that a *lot* better, but there remain (documented but - * complex) edge cases and some behavior intuitive. - * Due to this, the default of this list is `'tab-size'`, which worked the best - * in most markdown parsers. - * Currently, the situation between markdown parsers is better, so choosing - * `'space'` (which seems to be the most common style used by authors) should - * be okay. + * CommonMark made that a *lot* better, + * but there remain (documented but complex) edge cases and some behavior + * intuitive. + * Due to this, `'tab'` works the best in most markdown parsers *and* in + * CommonMark. + * Currently the situation between markdown parsers is better, + * so the default `'one'`, + * which seems to be the most common style used by authors, + * is okay. * * ## Fix * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * uses `'tab-size'` (named `'tab'` there) by default. - * [`listItemIndent: '1'` (for `'space'`) or `listItemIndent: 'mixed'`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#optionslistitemindent) - * is supported. + * [`remark-stringify`][github-remark-stringify] uses `listItemIndent: 'one'` + * by default. + * `listItemIndent: 'mixed'` or `listItemIndent: 'tab'` is also supported. + * + * [api-options]: #options + * [api-remark-lint-list-item-indent]: #unifieduseremarklintlistitemindent-options + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * * @module list-item-indent - * @summary - * remark-lint rule to warn when spacing between list item markers and - * content is inconsistent. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * *···List - * ····item. + * *␠Mercury. + * *␠Venus. + * + * 111.␠Earth + * ␠␠␠␠␠and Mars. + * + * *␠**Jupiter**. + * + * ␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠System. + * + * *␠Saturn. + * + * ␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. + * + * @example + * {"config": "mixed", "name": "ok.md"} + * + * *␠Mercury. + * *␠Venus. + * + * 111.␠Earth + * ␠␠␠␠␠and Mars. + * + * *␠␠␠**Jupiter**. + * + * ␠␠␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠␠␠System. + * + * *␠␠␠Saturn. + * + * ␠␠␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. + * + * @example + * {"config": "mixed", "label": "input", "name": "not-ok.md"} + * + * *␠␠␠Mercury. + * *␠␠␠Venus. + * + * 111.␠␠␠␠Earth + * ␠␠␠␠␠␠␠␠and Mars. + * + * *␠**Jupiter**. + * + * ␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠System. + * + * *␠Saturn. + * + * ␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. + * @example + * {"config": "mixed", "label": "output", "name": "not-ok.md"} * - * Paragraph. + * 1:5: Unexpected `3` spaces between list item marker and content in tight list, expected `1` space, remove `2` spaces + * 2:5: Unexpected `3` spaces between list item marker and content in tight list, expected `1` space, remove `2` spaces + * 4:9: Unexpected `4` spaces between list item marker and content in tight list, expected `1` space, remove `3` spaces + * 7:3: Unexpected `1` space between list item marker and content in loose list, expected `3` spaces, add `2` spaces + * 12:3: Unexpected `1` space between list item marker and content in loose list, expected `3` spaces, add `2` spaces * - * 11.·List - * ····item. + * @example + * {"config": "one", "name": "ok.md"} + * + * *␠Mercury. + * *␠Venus. + * + * 111.␠Earth + * ␠␠␠␠␠and Mars. + * + * *␠**Jupiter**. * - * Paragraph. + * ␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠System. * - * *···List - * ····item. + * *␠Saturn. * - * *···List - * ····item. + * ␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. * * @example - * {"name": "ok.md", "config": "mixed"} + * {"config": "one", "label": "input", "name": "not-ok.md"} * - * *·List item. + * *␠␠␠Mercury. + * *␠␠␠Venus. * - * Paragraph. + * 111.␠␠␠␠Earth + * ␠␠␠␠␠␠␠␠and Mars. * - * 11.·List item + * *␠␠␠**Jupiter**. * - * Paragraph. + * ␠␠␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠␠␠System. * - * *···List - * ····item. + * *␠␠␠Saturn. * - * *···List - * ····item. + * ␠␠␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. + * @example + * {"config": "one", "label": "output", "name": "not-ok.md"} + * + * 1:5: Unexpected `3` spaces between list item marker and content, expected `1` space, remove `2` spaces + * 2:5: Unexpected `3` spaces between list item marker and content, expected `1` space, remove `2` spaces + * 4:9: Unexpected `4` spaces between list item marker and content, expected `1` space, remove `3` spaces + * 7:5: Unexpected `3` spaces between list item marker and content, expected `1` space, remove `2` spaces + * 12:5: Unexpected `3` spaces between list item marker and content, expected `1` space, remove `2` spaces * * @example - * {"name": "ok.md", "config": "space"} + * {"config": "tab", "name": "ok.md"} * - * *·List item. + * *␠␠␠Mercury. + * *␠␠␠Venus. * - * Paragraph. + * 111.␠␠␠␠Earth + * ␠␠␠␠␠␠␠␠and Mars. * - * 11.·List item + * *␠␠␠**Jupiter**. * - * Paragraph. + * ␠␠␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠␠␠System. * - * *·List - * ··item. + * *␠␠␠Saturn. * - * *·List - * ··item. + * ␠␠␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. * * @example - * {"name": "not-ok.md", "config": "space", "label": "input"} + * {"config": "tab", "label": "input", "name": "not-ok.md"} + * + * *␠Mercury. + * *␠Venus. + * + * 111.␠Earth + * ␠␠␠␠␠and Mars. * - * *···List - * ····item. + * *␠**Jupiter**. * + * ␠␠Jupiter is the fifth planet from the Sun and the largest in the Solar + * ␠␠System. + * + * *␠Saturn. + * + * ␠␠Saturn is the sixth planet from the Sun and the second-largest in the Solar System, after Jupiter. * @example - * {"name": "not-ok.md", "config": "space", "label": "output"} + * {"config": "tab", "label": "output", "name": "not-ok.md"} * - * 1:5: Incorrect list-item indent: remove 2 spaces + * 1:3: Unexpected `1` space between list item marker and content, expected `3` spaces, add `2` spaces + * 2:3: Unexpected `1` space between list item marker and content, expected `3` spaces, add `2` spaces + * 4:6: Unexpected `1` space between list item marker and content, expected `4` spaces, add `3` spaces + * 7:3: Unexpected `1` space between list item marker and content, expected `3` spaces, add `2` spaces + * 12:3: Unexpected `1` space between list item marker and content, expected `3` spaces, add `2` spaces * * @example - * {"name": "not-ok.md", "config": "tab-size", "label": "input"} + * {"config": "🌍", "label": "output", "name": "not-ok.md", "positionless": true} * - * *·List - * ··item. + * 1:1: Unexpected value `🌍` for `options`, expected `'mixed'`, `'one'`, or `'tab'` * * @example - * {"name": "not-ok.md", "config": "tab-size", "label": "output"} + * {"config": "mixed", "gfm": true, "label": "input", "name": "gfm.md"} + * + * *␠[x] Mercury. + * + * 1.␠␠[ ] Venus. * - * 1:3: Incorrect list-item indent: add 2 spaces + * 2.␠␠[ ] Earth. * * @example - * {"name": "not-ok.md", "config": "mixed", "label": "input"} + * {"config": "one", "gfm": true, "name": "gfm.md"} * - * *···List item. + * *␠[x] Mercury. + * + * 1.␠[ ] Venus. + * + * 2.␠[ ] Earth. * * @example - * {"name": "not-ok.md", "config": "mixed", "label": "output"} + * {"config": "tab", "gfm": true, "name": "gfm.md"} + * + * *␠␠␠[x] Mercury. + * + * 1.␠␠[ ] Venus. * - * 1:5: Incorrect list-item indent: remove 2 spaces + * 2.␠␠[ ] Earth. * * @example - * {"name": "not-ok.md", "config": "💩", "label": "output", "positionless": true} + * {"config": "mixed", "name": "loose-tight.md"} * - * 1:1: Incorrect list-item indent style `💩`: use either `'tab-size'`, `'space'`, or `'mixed'` + * Loose lists have blank lines between items: + * + * *␠␠␠Mercury. + * + * *␠␠␠Venus. + * + * …or between children of items: + * + * 1.␠␠Earth. + * + * ␠␠␠␠Earth is the third planet from the Sun and the only astronomical + * ␠␠␠␠object known to harbor life. */ -const remarkLintListItemIndent = lintRule( +const remarkLintListItemIndent = lintRule$1( { origin: 'remark-lint:list-item-indent', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-indent#readme' }, - (tree, file, option = 'tab-size') => { + function (tree, file, options) { const value = String(file); - if (option !== 'tab-size' && option !== 'space' && option !== 'mixed') { + let expected; + if (options === null || options === undefined) { + expected = 'one'; + } else if (options === 'space') { + file.fail( + 'Unexpected value `' + options + "` for `options`, expected `'one'`" + ); + } else if (options === 'tab-size') { + file.fail( + 'Unexpected value `' + options + "` for `options`, expected `'tab'`" + ); + } else if (options === 'mixed' || options === 'one' || options === 'tab') { + expected = options; + } else { file.fail( - 'Incorrect list-item indent style `' + - option + - "`: use either `'tab-size'`, `'space'`, or `'mixed'`" + 'Unexpected value `' + + options + + "` for `options`, expected `'mixed'`, `'one'`, or `'tab'`" ); } - visit$x(tree, 'list', (node) => { - if (generated(node)) return - const spread = node.spread; - let index = -1; - while (++index < node.children.length) { - const item = node.children[index]; - const head = item.children[0]; - const final = pointStart(head); - const marker = value - .slice(pointStart(item).offset, final.offset) - .replace(/\[[x ]?]\s*$/i, ''); - const bulletSize = marker.replace(/\s+$/, '').length; - const style = - option === 'tab-size' || (option === 'mixed' && spread) - ? Math.ceil(bulletSize / 4) * 4 - : bulletSize + 1; - if (marker.length !== style) { - const diff = style - marker.length; - const abs = Math.abs(diff); - file.message( - 'Incorrect list-item indent: ' + - (diff > 0 ? 'add' : 'remove') + - ' ' + - abs + - ' ' + - plural('space', abs), - final - ); + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'list') return + let loose = node.spread; + if (!loose) { + for (const child of node.children) { + if (child.spread) { + loose = true; + break + } + } + } + for (const child of node.children) { + const head = child.children[0]; + const itemStart = pointStart(child); + const headStart = pointStart(head); + if ( + itemStart && + headStart && + typeof itemStart.offset === 'number' && + typeof headStart.offset === 'number' + ) { + let slice = value.slice(itemStart.offset, headStart.offset); + const checkboxIndex = slice.indexOf('['); + if (checkboxIndex !== -1) slice = slice.slice(0, checkboxIndex); + const actualIndent = slice.length; + let end = actualIndent; + let previous = slice.charCodeAt(end - 1); + while (previous === 9 || previous === 32) { + end--; + previous = slice.charCodeAt(end - 1); + } + let expectedIndent = end + 1; + if (expected === 'tab' || (expected === 'mixed' && loose)) { + expectedIndent = Math.ceil(expectedIndent / 4) * 4; + } + const expectedSpaces = expectedIndent - end; + const actualSpaces = actualIndent - end; + if (actualSpaces !== expectedSpaces) { + const difference = expectedSpaces - actualSpaces; + const differenceAbsolute = Math.abs(difference); + file.message( + 'Unexpected `' + + actualSpaces + + '` ' + + pluralize('space', actualSpaces) + + ' between list item marker and content' + + (expected === 'mixed' + ? ' in ' + (loose ? 'loose' : 'tight') + ' list' + : '') + + ', expected `' + + expectedSpaces + + '` ' + + pluralize('space', expectedSpaces) + + ', ' + + (difference > 0 ? 'add' : 'remove') + + ' `' + + differenceAbsolute + + '` ' + + pluralize('space', differenceAbsolute), + {ancestors: [...parents, node, child], place: headStart} + ); + } } } }); @@ -13457,252 +13372,181 @@ const remarkLintListItemIndent = lintRule( ); var remarkLintListItemIndent$1 = remarkLintListItemIndent; -const convert$w = - ( - function (test) { - if (test === undefined || test === null) { - return ok$w - } - if (typeof test === 'string') { - return typeFactory$w(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$w(test) : propsFactory$w(test) - } - if (typeof test === 'function') { - return castFactory$w(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$w(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$w(tests[index]); - } - return castFactory$w(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$w(check) { - return castFactory$w(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$w(check) { - return castFactory$w(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$w(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$w() { - return true -} - -function color$x(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$w = true; -const EXIT$w = false; -const SKIP$w = 'skip'; -const visitParents$w = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$w(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$x(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$w(visitor(node, parents)); - if (result[0] === EXIT$w) { - return result - } - } - if (node.children && result[0] !== SKIP$w) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$w) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$w(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$w, value] - } - return [value] -} - -const visit$w = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$w(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - /** + * remark-lint rule to warn for lazy lines in block quotes. + * + * ## What is this? + * + * This package checks the style of block quotes. + * * ## When should I use this? * - * You can use this package to check that lines in block quotes start with `>`. + * You can use this package to check that the style of block quotes is + * consistent. * * ## API * + * ### `unified().use(remarkLintNoBlockquoteWithoutMarker)` + * + * Warn for lazy lines in block quotes. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * - * Rules around “lazy” lines are not straightforward and visually confusing, + * Rules around lazy lines are not straightforward and visually confusing, * so it’s recommended to start each line with a `>`. * * ## Fix * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * adds `>` markers to every line in a block quote. + * [`remark-stringify`][github-remark-stringify] adds `>` markers to every line + * in a block quote. + * + * [api-remark-lint-no-blockquote-without-marker]: #unifieduseremarklintnoblockquotewithoutmarker + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * * @module no-blockquote-without-marker - * @summary - * remark-lint rule to warn when lines in block quotes start without `>`. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT * @example * {"name": "ok.md"} * - * > Foo… - * > …bar… - * > …baz. + * > Mercury, + * > Venus, + * > and Earth. + * + * Mars. * * @example * {"name": "ok-tabs.md"} * - * >»Foo… - * >»…bar… - * >»…baz. + * >␉Mercury, + * >␉Venus, + * >␉and Earth. * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * > Foo… - * …bar… - * > …baz. + * > Mercury, + * Venus, + * > and Earth. + * @example + * {"label": "output", "name": "not-ok.md"} + * + * 2:1: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker * * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "input", "name": "not-ok-tabs.md"} + * + * >␉Mercury, + * ␉Venus, + * and Earth. + * @example + * {"label": "output", "name": "not-ok-tabs.md"} * - * 2:1: Missing marker in block quote + * 2:2: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker + * 3:1: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker * * @example - * {"name": "not-ok-tabs.md", "label": "input"} + * {"label": "input", "name": "containers.md"} + * + * * > Mercury and + * Venus. + * + * > * Mercury and + * Venus. + * + * * > * Mercury and + * Venus. * - * >»Foo… - * »…bar… - * …baz. + * > * > Mercury and + * Venus. * + * *** + * + * > * > Mercury and + * > Venus. * @example - * {"name": "not-ok-tabs.md", "label": "output"} + * {"label": "output", "name": "containers.md"} * - * 2:1: Missing marker in block quote - * 3:1: Missing marker in block quote + * 2:1: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker + * 5:3: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker + * 8:5: Unexpected `0` block quote markers before paragraph line, expected `1` marker, add `1` marker + * 11:7: Unexpected `0` block quote markers before paragraph line, expected `2` markers, add `2` markers + * 16:7: Unexpected `1` block quote marker before paragraph line, expected `2` markers, add `1` marker */ -const remarkLintNoBlockquoteWithoutMarker = lintRule( +const remarkLintNoBlockquoteWithoutMarker = lintRule$1( { origin: 'remark-lint:no-blockquote-without-marker', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-blockquote-without-marker#readme' }, - (tree, file) => { + function (tree, file) { const value = String(file); const loc = location(file); - visit$w(tree, 'blockquote', (node) => { - let index = -1; - while (++index < node.children.length) { - const child = node.children[index]; - if (child.type === 'paragraph' && !generated(child)) { - const end = pointEnd(child).line; - const column = pointStart(child).column; - let line = pointStart(child).line; - while (++line <= end) { - const offset = loc.toOffset({line, column}); - if (/>[\t ]+$/.test(value.slice(offset - 5, offset))) { - continue - } - file.message('Missing marker in block quote', { - line, - column: column - 2 - }); + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'paragraph') return + let expected = 0; + for (const parent of parents) { + if (parent.type === 'blockquote') { + expected++; + } + else if ( + parent.type === 'containerDirective' || + parent.type === 'footnoteDefinition' || + parent.type === 'list' || + parent.type === 'listItem' || + parent.type === 'root' + ) ; else { + return SKIP + } + } + if (!expected) return SKIP + const end = pointEnd(node); + const start = pointStart(node); + if (!end || !start) return SKIP + let line = start.line; + while (++line <= end.line) { + const lineStart = loc.toOffset({line, column: 1}); + let actual = 0; + let index = lineStart; + while (index < value.length) { + const code = value.charCodeAt(index); + if (code === 9 || code === 32) ; else if (code === 62 ) { + actual++; + } else { + break } + index++; + } + const point = loc.toPoint(index); + const difference = expected - actual; + if (difference) { + file.message( + 'Unexpected `' + + actual + + '` block quote ' + + pluralize('marker', actual) + + ' before paragraph line, expected `' + + expected + + '` ' + + pluralize('marker', expected) + + ', add `' + + difference + + '` ' + + pluralize('marker', difference), + {ancestors: [...parents, node], place: point} + ); } } }); @@ -13710,6437 +13554,4119 @@ const remarkLintNoBlockquoteWithoutMarker = lintRule( ); var remarkLintNoBlockquoteWithoutMarker$1 = remarkLintNoBlockquoteWithoutMarker; -const convert$v = - ( - function (test) { - if (test === undefined || test === null) { - return ok$v - } - if (typeof test === 'string') { - return typeFactory$v(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$v(test) : propsFactory$v(test) - } - if (typeof test === 'function') { - return castFactory$v(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$v(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$v(tests[index]); - } - return castFactory$v(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$v(check) { - return castFactory$v(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$v(check) { - return castFactory$v(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$v(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$v() { - return true -} - -function color$w(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$v = true; -const EXIT$v = false; -const SKIP$v = 'skip'; -const visitParents$v = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$v(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$w(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$v(visitor(node, parents)); - if (result[0] === EXIT$v) { - return result - } - } - if (node.children && result[0] !== SKIP$v) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$v) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$v(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$v, value] - } - return [value] -} - -const visit$v = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$v(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -const emptyOptions$1 = {}; -function toString$1(value, options) { - const settings = options || emptyOptions$1; - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true; - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true; - return one$1(value, includeImageAlt, includeHtml) -} -function one$1(value, includeImageAlt, includeHtml) { - if (node$1(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - if ('children' in value) { - return all$1(value.children, includeImageAlt, includeHtml) - } - } - if (Array.isArray(value)) { - return all$1(value, includeImageAlt, includeHtml) - } - return '' -} -function all$1(values, includeImageAlt, includeHtml) { - const result = []; - let index = -1; - while (++index < values.length) { - result[index] = one$1(values[index], includeImageAlt, includeHtml); - } - return result.join('') -} -function node$1(value) { - return Boolean(value && typeof value === 'object') -} - /** + * remark-lint rule to warn when identifiers are defined multiple times. + * + * ## What is this? + * + * This package checks that defined identifiers are unique. + * * ## When should I use this? * - * You can use this package to check that autolink literal URLs are not used. + * You can use this package to check that definitions are useful. * * ## API * + * ### `unified().use(remarkLintNoDuplicateDefinitions)` + * + * Warn when identifiers are defined multiple times. + * + * ###### Parameters + * * There are no options. * - * ## Recommendation + * ###### Returns * - * Autolink literal URLs (just a URL) are a feature enabled by GFM. - * They don’t work everywhere. - * Due to this, it’s recommended to instead use normal autolinks - * (``) or links (`[text](url)`). + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * ## Fix + * ## Recommendation * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * never creates autolink literals and always uses normal autolinks (``). + * It’s a mistake when the same identifier is defined multiple times. * - * @module no-literal-urls - * @summary - * remark-lint rule to warn for autolink literals. + * [api-remark-lint-no-duplicate-definitions]: #unifieduseremarklintnoduplicatedefinitions + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-duplicate-definitions * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * + * [mercury]: https://example.com/mercury/ + * [venus]: https://example.com/venus/ * * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} + * {"label": "input", "name": "not-ok.md"} + * + * [mercury]: https://example.com/mercury/ + * [mercury]: https://example.com/venus/ + * @example + * {"label": "output", "name": "not-ok.md"} * - * http://foo.bar/baz + * 2:1-2:38: Unexpected definition with an already defined identifier (`mercury`), expected unique identifiers * * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} + * {"gfm": true, "label": "input", "name": "gfm.md"} + * + * Mercury[^mercury]. + * + * [^mercury]: + * Mercury is the first planet from the Sun and the smallest in the Solar + * System. * - * 1:1-1:19: Don’t use literal URLs without angle brackets + * [^mercury]: + * Venus is the second planet from the Sun. + * + * @example + * {"gfm": true, "label": "output", "name": "gfm.md"} + * + * 7:1-7:12: Unexpected footnote definition with an already defined identifier (`mercury`), expected unique identifiers */ -const remarkLintNoLiteralUrls = lintRule( +const empty = []; +const remarkLintNoDuplicateDefinitions = lintRule$1( { - origin: 'remark-lint:no-literal-urls', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-literal-urls#readme' + origin: 'remark-lint:no-duplicate-definitions', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-definitions#readme' }, - (tree, file) => { - visit$v(tree, 'link', (node) => { - const value = toString$1(node); - if ( - !generated(node) && - pointStart(node).column === pointStart(node.children[0]).column && - pointEnd(node).column === - pointEnd(node.children[node.children.length - 1]).column && - (node.url === 'mailto:' + value || node.url === value) - ) { - file.message('Don’t use literal URLs without angle brackets', node); + function (tree, file) { + const definitions = new Map(); + const footnoteDefinitions = new Map(); + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + const [map, identifier] = + node.type === 'definition' + ? [definitions, node.identifier] + : node.type === 'footnoteDefinition' + ? [footnoteDefinitions, node.identifier] + : empty; + if (map && identifier && node.position) { + const ancestors = [...parents, node]; + const duplicateAncestors = map.get(identifier); + if (duplicateAncestors) { + const duplicate = duplicateAncestors.at(-1); + file.message( + 'Unexpected ' + + (node.type === 'footnoteDefinition' ? 'footnote ' : '') + + 'definition with an already defined identifier (`' + + identifier + + '`), expected unique identifiers', + { + ancestors, + cause: new VFileMessage('Identifier already defined here', { + ancestors: duplicateAncestors, + place: duplicate.position, + source: 'remark-lint', + ruleId: 'no-duplicate-definitions' + }), + place: node.position + } + ); + } + map.set(identifier, ancestors); } }); } ); -var remarkLintNoLiteralUrls$1 = remarkLintNoLiteralUrls; - -const convert$u = - ( - function (test) { - if (test === undefined || test === null) { - return ok$u - } - if (typeof test === 'string') { - return typeFactory$u(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$u(test) : propsFactory$u(test) - } - if (typeof test === 'function') { - return castFactory$u(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$u(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$u(tests[index]); - } - return castFactory$u(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$u(check) { - return castFactory$u(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$u(check) { - return castFactory$u(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$u(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$u() { - return true -} - -function color$v(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$u = true; -const EXIT$u = false; -const SKIP$u = 'skip'; -const visitParents$u = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$u(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$v(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$u(visitor(node, parents)); - if (result[0] === EXIT$u) { - return result - } - } - if (node.children && result[0] !== SKIP$u) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$u) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$u(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$u, value] - } - return [value] -} - -const visit$u = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$u(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var remarkLintNoDuplicateDefinitions$1 = remarkLintNoDuplicateDefinitions; /** + * remark-lint rule to warn when extra whitespace is used between hashes and + * content in headings. + * + * ## What is this? + * + * This package checks whitespace between hashes and content. + * * ## When should I use this? * - * You can use this package to check that ordered list markers are consistent. + * You can use this package to check that headings are consistent. * * ## API * - * The following options (default: `'consistent'`) are accepted: + * ### `unified().use(remarkLintNoHeadingContentIndent)` + * + * Warn when extra whitespace is used between hashes and content in headings. + * + * ###### Parameters + * + * There are no options. + * + * ###### Returns * - * * `'.'` - * — prefer dots - * * `')'` - * — prefer parens - * * `'consistent'` - * — detect the first used style and warn when further markers differ + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * * ## Recommendation * - * Parens for list markers were not supported in markdown before CommonMark. - * While they should work in most places now, not all markdown parsers follow - * CommonMark. - * Due to this, it’s recommended to prefer dots. + * One space is required and more than one space has no effect. + * Due to this, it’s recommended to turn this rule on. * * ## Fix * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats ordered lists with dots by default. - * Pass - * [`bulletOrdered: ')'`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#optionsbulletordered) - * to always use parens. + * [`remark-stringify`][github-remark-stringify] formats headings with one space. * - * @module ordered-list-marker-style - * @summary - * remark-lint rule to warn when ordered list markers are inconsistent. + * [api-remark-lint-no-heading-content-indent]: #unifieduseremarklintnoheadingcontentindent + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-heading-content-indent * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * 1. Foo - * + * #␠Mercury * - * 1. Bar + * ##␠Venus␠## * - * Unordered lists are not affected by this rule. + * ␠␠##␠Earth * - * * Foo + * Setext headings are not affected: * - * @example - * {"name": "ok.md", "config": "."} - * - * 1. Foo + * ␠Mars + * ===== * - * 2. Bar + * ␠Jupiter + * -------- * * @example - * {"name": "ok.md", "config": ")"} + * {"label": "input", "name": "not-ok.md"} * - * 1) Foo + * #␠␠Mercury * - * 2) Bar + * ##␠Venus␠␠## * + * ␠␠##␠␠␠Earth * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "output", "name": "not-ok.md"} * - * 1. Foo - * - * 2) Bar + * 1:4: Unexpected `2` spaces between hashes and content, expected `1` space, remove `1` space + * 3:11: Unexpected `2` spaces between content and hashes, expected `1` space, remove `1` space + * 5:8: Unexpected `3` spaces between hashes and content, expected `1` space, remove `2` spaces * * @example - * {"name": "not-ok.md", "label": "output"} - * - * 3:1-3:8: Marker style should be `.` + * {"label": "input", "name": "empty-heading.md"} * + * #␠␠ * @example - * {"name": "not-ok.md", "label": "output", "config": "💩", "positionless": true} + * {"label": "output", "name": "empty-heading.md"} * - * 1:1: Incorrect ordered list item marker style `💩`: use either `'.'` or `')'` + * 1:4: Unexpected `2` spaces between hashes and content, expected `1` space, remove `1` space */ -const remarkLintOrderedListMarkerStyle = lintRule( +const remarkLintNoHeadingContentIndent = lintRule$1( { - origin: 'remark-lint:ordered-list-marker-style', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-ordered-list-marker-style#readme' + origin: 'remark-lint:no-heading-content-indent', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-content-indent#readme' }, - (tree, file, option = 'consistent') => { + function (tree, file) { const value = String(file); - if (option !== 'consistent' && option !== '.' && option !== ')') { - file.fail( - 'Incorrect ordered list item marker style `' + - option + - "`: use either `'.'` or `')'`" - ); - } - visit$u(tree, 'list', (node) => { - let index = -1; - if (!node.ordered) return - while (++index < node.children.length) { - const child = node.children[index]; - if (!generated(child)) { - const marker = ( - value - .slice( - pointStart(child).offset, - pointStart(child.children[0]).offset - ) - .replace(/\s|\d/g, '') - .replace(/\[[x ]?]\s*$/i, '') - ); - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Marker style should be `' + option + '`', child); - } - } - } - }); - } -); -var remarkLintOrderedListMarkerStyle$1 = remarkLintOrderedListMarkerStyle; - -const convert$t = - ( - function (test) { - if (test === undefined || test === null) { - return ok$t + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP } - if (typeof test === 'string') { - return typeFactory$t(test) + if (node.type !== 'heading') return + const start = pointStart(node); + const end = pointEnd(node); + if ( + !end || + !start || + typeof end.offset !== 'number' || + typeof start.offset !== 'number' + ) { + return } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$t(test) : propsFactory$t(test) + let index = start.offset; + let code = value.charCodeAt(index); + let found = false; + while (value.charCodeAt(index) === 35 ) { + index++; + found = true; + continue } - if (typeof test === 'function') { - return castFactory$t(test) + const from = index; + code = value.charCodeAt(index); + while (code === 9 || code === 32 ) { + code = value.charCodeAt(++index); + continue } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$t(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$t(tests[index]); - } - return castFactory$t(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$t(check) { - return castFactory$t(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$t(check) { - return castFactory$t(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$t(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$t() { - return true -} - -function color$u(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$t = true; -const EXIT$t = false; -const SKIP$t = 'skip'; -const visitParents$t = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$t(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$u(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$t(visitor(node, parents)); - if (result[0] === EXIT$t) { - return result + const size = index - from; + if (found && size > 1) { + file.message( + 'Unexpected `' + + size + + '` ' + + pluralize('space', size) + + ' between hashes and content, expected `1` space, remove `' + + (size - 1) + + '` ' + + pluralize('space', size - 1), + { + ancestors: [...parents, node], + place: { + line: start.line, + column: start.column + (index - start.offset), + offset: start.offset + (index - start.offset) } } - if (node.children && result[0] !== SKIP$t) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$t) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; + ); + } + const contentStart = index; + index = end.offset; + code = value.charCodeAt(index - 1); + while (code === 9 || code === 32 ) { + index--; + code = value.charCodeAt(index - 1); + continue + } + let endFound = false; + while (value.charCodeAt(index - 1) === 35 ) { + index--; + endFound = true; + continue + } + const endFrom = index; + code = value.charCodeAt(index - 1); + while (code === 9 || code === 32 ) { + index--; + code = value.charCodeAt(index - 1); + continue + } + const endSize = endFrom - index; + if (endFound && index > contentStart && endSize > 1) { + file.message( + 'Unexpected `' + + endSize + + '` ' + + pluralize('space', endSize) + + ' between content and hashes, expected `1` space, remove `' + + (endSize - 1) + + '` ' + + pluralize('space', endSize - 1), + { + ancestors: [...parents, node], + place: { + line: end.line, + column: end.column - (end.offset - endFrom), + offset: end.offset - (end.offset - endFrom) } } - return result - } + ); } - } - ); -function toResult$t(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$t, value] + }); } - return [value] -} +); +var remarkLintNoHeadingContentIndent$1 = remarkLintNoHeadingContentIndent; -const visit$t = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$t(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) +/** + * remark-lint rule to warn when GFM autolink literals are used. + * + * ## What is this? + * + * This package checks that regular autolinks or full links are used. + * Literal autolinks is a GFM feature enabled with + * [`remark-gfm`][github-remark-gfm]. + * + * ## When should I use this? + * + * You can use this package to check that links are consistent. + * + * ## API + * + * ### `unified().use(remarkLintNoLiteralUrls)` + * + * Warn when GFM autolink literals are used. + * + * ###### Parameters + * + * There are no options. + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ## Recommendation + * + * GFM autolink literals (just a raw URL) are a feature enabled by GFM. + * They don’t work everywhere. + * So, + * it’s recommended to instead use regular autolinks (``) or full + * links (`[text](url)`). + * + * ## Fix + * + * [`remark-stringify`][github-remark-stringify] never generates GFM autolink + * literals. + * It always generates regular autolinks or full links. + * + * [api-remark-lint-no-literal-urls]: #unifieduseremarklintnoliteralurls + * [github-remark-gfm]: https://github.com/remarkjs/remark-gfm + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-literal-urls + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT + * + * @example + * {"name": "ok.md", "gfm": true} + * + * + * + * ![Venus](http://example.com/venus/). + * + * @example + * {"name": "not-ok.md", "label": "input", "gfm": true} + * + * https://example.com/mercury/ + * + * www.example.com/venus/ + * + * earth@mars.planets + * + * @example + * {"name": "not-ok.md", "label": "output", "gfm": true} + * + * 1:1-1:29: Unexpected GFM autolink literal, expected regular autolink, add `<` before and `>` after + * 3:1-3:23: Unexpected GFM autolink literal, expected regular autolink, add `` after + * 5:1-5:19: Unexpected GFM autolink literal, expected regular autolink, add `` after + */ +const defaultHttp = 'http://'; +const defaultMailto = 'mailto:'; +const remarkLintNoLiteralUrls = lintRule$1( + { + origin: 'remark-lint:no-literal-urls', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-literal-urls#readme' + }, + function (tree, file) { + const value = String(file); + visitParents(tree, 'link', function (node, parents) { + const start = pointStart(node); + if (!start || typeof start.offset !== 'number') return + const raw = toString(node); + let protocol; + let otherwiseFine = false; + if (raw === node.url) { + otherwiseFine = true; + } else if (defaultHttp + raw === node.url) { + protocol = defaultHttp; + } else if (defaultMailto + raw === node.url) { + protocol = defaultMailto; } - } - ); + if ( + (protocol || otherwiseFine) && + !asciiPunctuation(value.charCodeAt(start.offset)) + ) { + file.message( + 'Unexpected GFM autolink literal, expected regular autolink, add ' + + (protocol ? '`<' + protocol + '`' : '`<`') + + ' before and `>` after', + {ancestors: [...parents, node], place: node.position} + ); + } + }); + } +); +var remarkLintNoLiteralUrls$1 = remarkLintNoLiteralUrls; /** + * remark-lint rule to warn when shortcut reference images are used. + * + * ## What is this? + * + * This package checks that collapsed or full reference images are used. + * * ## When should I use this? * - * You can use this package to check that hard breaks use two spaces and - * not more. + * You can use this package to check that references are consistent. * * ## API * + * ### `unified().use(remarkLintNoShortcutReferenceImage)` + * + * Warn when shortcut reference images are used. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * - * Less than two spaces do not create a hard breaks and more than two spaces - * have no effect. - * Due to this, it’s recommended to turn this rule on. + * Shortcut references use an implicit style that looks a lot like something + * that could occur as plain text instead of syntax. + * In some cases, + * plain text is intended instead of an image. + * So it’s recommended to use collapsed or full references instead. * - * @module hard-break-spaces - * @summary - * remark-lint rule to warn when more spaces are used than needed - * for hard breaks. + * [api-remark-lint-no-shortcut-reference-image]: #unifieduseremarklintnoshortcutreferenceimage + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-shortcut-reference-image * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * Lorem ipsum·· - * dolor sit amet + * ![Mercury][] + * + * [mercury]: /mercury.png * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * Lorem ipsum··· - * dolor sit amet. + * ![Mercury] * + * [mercury]: /mercury.png * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "output", "name": "not-ok.md"} * - * 1:12-2:1: Use two spaces for hard line breaks + * 1:1-1:11: Unexpected shortcut reference image (`![text]`), expected collapsed reference (`![text][]`) */ -const remarkLintHardBreakSpaces = lintRule( +const remarkLintNoShortcutReferenceImage = lintRule$1( { - origin: 'remark-lint:hard-break-spaces', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-hard-break-spaces#readme' + origin: 'remark-lint:no-shortcut-reference-image', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-image#readme' }, - (tree, file) => { - const value = String(file); - visit$t(tree, 'break', (node) => { - if (!generated(node)) { - const slice = value - .slice(pointStart(node).offset, pointEnd(node).offset) - .split('\n', 1)[0] - .replace(/\r$/, ''); - if (slice.length > 2) { - file.message('Use two spaces for hard line breaks', node); - } + function (tree, file) { + visitParents(tree, 'imageReference', function (node, parents) { + if (node.position && node.referenceType === 'shortcut') { + file.message( + 'Unexpected shortcut reference image (`![text]`), expected collapsed reference (`![text][]`)', + {ancestors: [...parents, node], place: node.position} + ); } }); } ); -var remarkLintHardBreakSpaces$1 = remarkLintHardBreakSpaces; - -function stringifyPosition$1(value) { - if (!value || typeof value !== 'object') { - return '' - } - if ('position' in value || 'type' in value) { - return position$1(value.position) - } - if ('start' in value || 'end' in value) { - return position$1(value) - } - if ('line' in value || 'column' in value) { - return point$1(value) - } - return '' -} -function point$1(point) { - return index$1(point && point.line) + ':' + index$1(point && point.column) -} -function position$1(pos) { - return point$1(pos && pos.start) + '-' + point$1(pos && pos.end) -} -function index$1(value) { - return value && typeof value === 'number' ? value : 1 -} - -const convert$s = - ( - function (test) { - if (test === undefined || test === null) { - return ok$s - } - if (typeof test === 'string') { - return typeFactory$s(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$s(test) : propsFactory$s(test) - } - if (typeof test === 'function') { - return castFactory$s(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$s(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$s(tests[index]); - } - return castFactory$s(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$s(check) { - return castFactory$s(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$s(check) { - return castFactory$s(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$s(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$s() { - return true -} - -function color$t(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$s = true; -const EXIT$s = false; -const SKIP$s = 'skip'; -const visitParents$s = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$s(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$t(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$s(visitor(node, parents)); - if (result[0] === EXIT$s) { - return result - } - } - if (node.children && result[0] !== SKIP$s) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$s) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$s(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$s, value] - } - return [value] -} - -const visit$s = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$s(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var remarkLintNoShortcutReferenceImage$1 = remarkLintNoShortcutReferenceImage; /** + * remark-lint rule to warn when shortcut reference links are used. + * + * ## What is this? + * + * This package checks that collapsed or full reference links are used. + * * ## When should I use this? * - * You can use this package to check that identifiers are defined once. + * You can use this package to check that references are consistent. * * ## API * + * ### `unified().use(remarkLintNoShortcutReferenceLink)` + * + * Warn when shortcut reference links are used. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * - * It’s a mistake when the same identifier is defined multiple times. + * Shortcut references use an implicit style that looks a lot like something + * that could occur as plain text instead of syntax. + * In some cases, + * plain text is intended instead of a link. + * So it’s recommended to use collapsed or full references instead. * - * @module no-duplicate-definitions - * @summary - * remark-lint rule to warn when identifiers are defined multiple times. + * [api-remark-lint-no-shortcut-reference-link]: #unifieduseremarklintnoshortcutreferencelink + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-shortcut-reference-link * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * [foo]: bar - * [baz]: qux + * [Mercury][] + * + * [mercury]: http://example.com/mercury/ * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * [foo]: bar - * [foo]: qux + * [Mercury] * + * [mercury]: http://example.com/mercury/ * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "output", "name": "not-ok.md"} * - * 2:1-2:11: Do not use definitions with the same identifier (1:1) + * 1:1-1:10: Unexpected shortcut reference link (`[text]`), expected collapsed reference (`[text][]`) */ -const remarkLintNoDuplicateDefinitions = lintRule( +const remarkLintNoShortcutReferenceLink = lintRule$1( { - origin: 'remark-lint:no-duplicate-definitions', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-definitions#readme' + origin: 'remark-lint:no-shortcut-reference-link', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-link#readme' }, - (tree, file) => { - const map = Object.create(null); - visit$s(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - const identifier = node.identifier; - const duplicate = map[identifier]; - if (duplicate) { - file.message( - 'Do not use definitions with the same identifier (' + - duplicate + - ')', - node - ); - } - map[identifier] = stringifyPosition$1(pointStart(node)); + function (tree, file) { + visitParents(tree, 'linkReference', function (node, parents) { + if (node.position && node.referenceType === 'shortcut') { + file.message( + 'Unexpected shortcut reference link (`[text]`), expected collapsed reference (`[text][]`)', + {ancestors: [...parents, node], place: node.position} + ); } }); } ); -var remarkLintNoDuplicateDefinitions$1 = remarkLintNoDuplicateDefinitions; +var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; -const convert$r = - ( - function (test) { - if (test === undefined || test === null) { - return ok$r - } - if (typeof test === 'string') { - return typeFactory$r(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$r(test) : propsFactory$r(test) - } - if (typeof test === 'function') { - return castFactory$r(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$r(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$r(tests[index]); - } - return castFactory$r(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$r(check) { - return castFactory$r(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$r(check) { - return castFactory$r(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$r(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$r() { - return true +const js = /\s+/g; +const html = /[\t\n\v\f\r ]+/g; +function collapseWhiteSpace(value, options) { + if (!options) { + options = {}; + } else if (typeof options === 'string') { + options = {style: options}; + } + const replace = options.preserveLineEndings ? replaceLineEnding : replaceSpace; + return String(value).replace( + options.style === 'html' ? html : js, + options.trim ? trimFactory(replace) : replace + ) } - -function color$s(d) { - return '\u001B[33m' + d + '\u001B[39m' +function replaceLineEnding(value) { + const match = /\r?\n|\r/.exec(value); + return match ? match[0] : ' ' } - -const CONTINUE$r = true; -const EXIT$r = false; -const SKIP$r = 'skip'; -const visitParents$r = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$r(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$s(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$r(visitor(node, parents)); - if (result[0] === EXIT$r) { - return result - } - } - if (node.children && result[0] !== SKIP$r) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$r) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$r(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$r, value] - } - return [value] +function replaceSpace() { + return ' ' } - -const visit$r = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$r(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -function headingStyle(node, relative) { - const last = node.children[node.children.length - 1]; - const depth = node.depth; - const pos = node.position && node.position.end; - const final = last && last.position && last.position.end; - if (!pos) { - return null - } - if (!last) { - if (pos.column - 1 <= depth * 2) { - return consolidate(depth, relative) - } - return 'atx-closed' - } - if (final && final.line + 1 === pos.line) { - return 'setext' - } - if (final && final.column + depth < pos.column) { - return 'atx-closed' +function trimFactory(replace) { + return dropOrReplace + function dropOrReplace(value, index, all) { + return index === 0 || index + value.length === all.length + ? '' + : replace(value) } - return consolidate(depth, relative) -} -function consolidate(depth, relative) { - return depth < 3 - ? 'atx' - : relative === 'atx' || relative === 'setext' - ? relative - : null } /** + * remark-lint rule to warn when undefined definitions are referenced. + * + * ## What is this? + * + * This package checks that referenced definitions are defined. + * * ## When should I use this? * - * You can use this package to check that there is on space between `#` - * characters and the content in headings. + * You can use this package to check for broken references. * * ## API * - * There are no options. + * ### `unified().use(remarkLintNoUndefinedReferences[, options])` + * + * Warn when undefined definitions are referenced. + * + * ###### Parameters + * + * * `options` ([`Options`][api-options], optional) + * — configuration + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). + * + * ###### Fields + * + * * `allow` (`Array`, optional) + * — list of values to allow between `[` and `]` + * * `allowShortcutLink` (`boolean`, default: `false`) + * — allow shortcut references, which are just brackets such as `[text]` * * ## Recommendation * - * One space is required and more than one space has no effect. - * Due to this, it’s recommended to turn this rule on. + * Shortcut references use an implicit syntax that could also occur as plain + * text. + * To illustrate, + * it is reasonable to expect an author adding `[…]` to abbreviate some text + * somewhere in a document: * - * ## Fix + * ```markdown + * > Some […] quote. + * ``` * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats headings with exactly one space. + * This isn’t a problem, + * but it might become one when an author later adds a definition: * - * @module no-heading-content-indent - * @summary - * remark-lint rule to warn when there are too many spaces between - * hashes and content in headings. + * ```markdown + * Some new text […][]. + * + * […]: #read-more + * ``` + * + * The second author might expect only their newly added text to form a link, + * but their changes also result in a link for the text by the first author. + * + * [api-options]: #options + * [api-remark-lint-no-undefined-references]: #unifieduseremarklintnoundefinedreferences-options + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-undefined-references * @author Titus Wormer - * @copyright 2015 Titus Wormer + * @copyright 2016 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * #·Foo + * [Mercury][] is the first planet from the Sun and the smallest in the Solar + * System. * - * ## Bar·## + * Venus is the second planet from the [Sun. * - * ##·Baz + * Earth is the third planet from the \[Sun] and the only astronomical object + * known to harbor life\. * - * Setext headings are not affected. + * Mars is the fourth planet from the Sun: []. * - * Baz - * === + * [mercury]: https://example.com/mercury/ * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * #··Foo + * [Mercury] is the first planet from the Sun and the smallest in the Solar + * System. * - * ## Bar··## + * [Venus][] is the second planet from the Sun. * - * ##··Baz + * [Earth][earth] is the third planet from the Sun and the only astronomical + * object known to harbor life. * - * @example - * {"name": "not-ok.md", "label": "output"} + * ![Mars] is the fourth planet from the Sun in the [Solar + * System]. + * + * > Jupiter is the fifth planet from the Sun and the largest in the [Solar + * > System][]. + * + * [Saturn][ is the sixth planet from the Sun and the second-largest + * in the Solar System, after Jupiter. * - * 1:4: Remove 1 space before this heading’s content - * 3:7: Remove 1 space after this heading’s content - * 5:7: Remove 1 space before this heading’s content + * [*Uranus*][] is the seventh planet from the Sun. * + * [Neptune][neptune][more] is the eighth and farthest planet from the Sun. * @example - * {"name": "empty-heading.md"} + * {"label": "output", "name": "not-ok.md"} + * + * 1:1-1:10: Unexpected reference to undefined definition, expected corresponding definition (`mercury`) for a link or escaped opening bracket (`\[`) for regular text + * 4:1-4:10: Unexpected reference to undefined definition, expected corresponding definition (`venus`) for a link or escaped opening bracket (`\[`) for regular text + * 6:1-6:15: Unexpected reference to undefined definition, expected corresponding definition (`earth`) for a link or escaped opening bracket (`\[`) for regular text + * 9:2-9:8: Unexpected reference to undefined definition, expected corresponding definition (`mars`) for an image or escaped opening bracket (`\[`) for regular text + * 9:50-10:8: Unexpected reference to undefined definition, expected corresponding definition (`solar system`) for a link or escaped opening bracket (`\[`) for regular text + * 12:67-13:12: Unexpected reference to undefined definition, expected corresponding definition (`solar > system`) for a link or escaped opening bracket (`\[`) for regular text + * 15:1-15:9: Unexpected reference to undefined definition, expected corresponding definition (`saturn`) for a link or escaped opening bracket (`\[`) for regular text + * 18:1-18:13: Unexpected reference to undefined definition, expected corresponding definition (`*uranus*`) for a link or escaped opening bracket (`\[`) for regular text + * 20:1-20:19: Unexpected reference to undefined definition, expected corresponding definition (`neptune`) for a link or escaped opening bracket (`\[`) for regular text + * 20:19-20:25: Unexpected reference to undefined definition, expected corresponding definition (`more`) for a link or escaped opening bracket (`\[`) for regular text * - * #·· + * @example + * {"config": {"allow": ["…"]}, "name": "ok-allow.md"} + * + * Mercury is the first planet from the Sun and the smallest in the Solar + * System. […] + * + * @example + * {"config": {"allow": [{"source": "^mer"}, "venus"]}, "name": "source.md"} + * + * [Mercury][] is the first planet from the Sun and the smallest in the Solar + * System. + * + * [Venus][] is the second planet from the Sun. + * + * @example + * {"gfm": true, "label": "input", "name": "gfm.md"} + * + * Mercury[^mercury] is the first planet from the Sun and the smallest in the + * Solar System. + * + * [^venus]: + * **Venus** is the second planet from the Sun. + * @example + * {"gfm": true, "label": "output", "name": "gfm.md"} + * + * 1:8-1:18: Unexpected reference to undefined definition, expected corresponding definition (`mercury`) for a footnote or escaped opening bracket (`\[`) for regular text + * + * @example + * {"config": {"allowShortcutLink": true}, "label": "input", "name": "allow-shortcut-link.md"} + * + * [Mercury] is the first planet from the Sun and the smallest in the Solar + * System. + * + * [Venus][] is the second planet from the Sun. + * + * [Earth][earth] is the third planet from the Sun and the only astronomical object + * known to harbor life. + * @example + * {"config": {"allowShortcutLink": true}, "label": "output", "name": "allow-shortcut-link.md"} + * + * 4:1-4:10: Unexpected reference to undefined definition, expected corresponding definition (`venus`) for a link or escaped opening bracket (`\[`) for regular text + * 6:1-6:15: Unexpected reference to undefined definition, expected corresponding definition (`earth`) for a link or escaped opening bracket (`\[`) for regular text */ -const remarkLintNoHeadingContentIndent = lintRule( +const emptyOptions = {}; +const emptyAllow = []; +const lineEndingExpression = /(\r?\n|\r)[\t ]*(>[\t ]*)*/g; +const remarkLintNoUndefinedReferences = lintRule$1( { - origin: 'remark-lint:no-heading-content-indent', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-content-indent#readme' + origin: 'remark-lint:no-undefined-references', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-undefined-references#readme' }, - (tree, file) => { - visit$r(tree, 'heading', (node) => { - if (generated(node)) { - return - } - const type = headingStyle(node, 'atx'); - if (type === 'atx' || type === 'atx-closed') { - const head = pointStart(node.children[0]).column; - if (!head) { - return - } - const diff = head - pointStart(node).column - 1 - node.depth; - if (diff) { - file.message( - 'Remove ' + - Math.abs(diff) + - ' ' + - plural('space', Math.abs(diff)) + - ' before this heading’s content', - pointStart(node.children[0]) - ); - } + function (tree, file, options) { + const settings = options || emptyOptions; + const allow = settings.allow || emptyAllow; + const allowShortcutLink = settings.allowShortcutLink || false; + const value = String(file); + const toPoint = location(file).toPoint; + const definitionIdentifiers = new Set(); + const footnoteDefinitionIdentifiers = new Set(); + const regexes = []; + const strings = new Set(); + const phrasingStacks = []; + let index = -1; + while (++index < allow.length) { + const value = allow[index]; + if (typeof value === 'string') { + strings.add(normalizeIdentifier(value)); + } else if (typeof value === 'object' && 'source' in value) { + regexes.push(new RegExp(value.source, value.flags ?? 'i')); } - if (type === 'atx-closed') { - const final = pointEnd(node.children[node.children.length - 1]); - const diff = pointEnd(node).column - final.column - 1 - node.depth; - if (diff) { - file.message( - 'Remove ' + - diff + - ' ' + - plural('space', diff) + - ' after this heading’s content', - final - ); - } + } + visitParents(tree, function (node, parents) { + if (node.type === 'definition') { + definitionIdentifiers.add(normalizeIdentifier(node.identifier)); } - }); - } -); -var remarkLintNoHeadingContentIndent$1 = remarkLintNoHeadingContentIndent; - -const convert$q = - ( - function (test) { - if (test === undefined || test === null) { - return ok$q + if (node.type === 'footnoteDefinition') { + footnoteDefinitionIdentifiers.add(normalizeIdentifier(node.identifier)); } - if (typeof test === 'string') { - return typeFactory$q(test) + if (node.type === 'heading' || node.type === 'paragraph') { + phrasingStacks.push([...parents, node]); } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$q(test) : propsFactory$q(test) + }); + for (const ancestors of phrasingStacks) { + findInPhrasingContainer(ancestors); + } + function findInPhrasingContainer(ancestors) { + const bracketRanges = []; + const node = ancestors.at(-1); + for (const child of node.children) { + if (child.type === 'text') { + findRangesInText(bracketRanges, [...ancestors, child]); + } else if ('children' in child) { + findInPhrasingContainer([...ancestors, child]); + } } - if (typeof test === 'function') { - return castFactory$q(test) + for (const range of bracketRanges) { + handleRange(range); } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$q(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$q(tests[index]); - } - return castFactory$q(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$q(check) { - return castFactory$q(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false } - return true - } -} -function typeFactory$q(check) { - return castFactory$q(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$q(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$q() { - return true -} - -function color$r(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$q = true; -const EXIT$q = false; -const SKIP$q = 'skip'; -const visitParents$q = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$q(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$r(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$q(visitor(node, parents)); - if (result[0] === EXIT$q) { - return result + function findRangesInText(ranges, ancestors) { + const node = ancestors.at(-1); + const end = pointEnd(node); + const start = pointStart(node); + if ( + !end || + !start || + typeof start.offset !== 'number' || + typeof end.offset !== 'number' + ) { + return + } + const source = value.slice(start.offset, end.offset); + const lines = [[start.offset, '']]; + let last = 0; + lineEndingExpression.lastIndex = 0; + let match = lineEndingExpression.exec(source); + while (match) { + const index = match.index; + const lineTuple = lines.at(-1); + lineTuple[1] = source.slice(last, index); + last = index + match[0].length; + lines.push([start.offset + last, '']); + match = lineEndingExpression.exec(source); + } + const lineTuple = lines.at(-1); + lineTuple[1] = source.slice(last); + for (const lineTuple of lines) { + const [lineStart, line] = lineTuple; + let index = 0; + while (index < line.length) { + const code = line.charCodeAt(index); + if (code === 91 ) { + ranges.push([ancestors, [lineStart + index]]); + index++; + } + else if (code === 92 ) { + const next = line.charCodeAt(index + 1); + index++; + if (next === 91 || next === 93 ) { + index++; } } - if (node.children && result[0] !== SKIP$q) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$q) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; + else if (code === 93 ) { + const bracketInfo = ranges.at(-1); + if (!bracketInfo) { + index++; + } + else if ( + line.charCodeAt(index + 1) === 91 && + bracketInfo[1].length !== 3 + ) { + index++; + bracketInfo[1].push(lineStart + index, lineStart + index); + index++; + } + else { + index++; + bracketInfo[1].push(lineStart + index); + handleRange(bracketInfo); + ranges.pop(); } } - return result + else { + index++; + } } } } - ); -function toResult$q(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$q, value] - } - return [value] -} - -const visit$q = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$q(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent + function handleRange(bracketRange) { + const [ancestors, range] = bracketRange; + if (range.length === 1) return + if (range.length === 3) range.length = 2; + if (range.length === 2 && range[0] + 2 === range[1]) return + const label = + value.charCodeAt(range[0] - 1) === 33 + ? 'image' + : value.charCodeAt(range[0] + 1) === 94 + ? 'footnote' + : 'link'; + const offset = range.length === 4 && range[2] + 2 !== range[3] ? 2 : 0; + let id = normalizeIdentifier( + collapseWhiteSpace( + value.slice(range[0 + offset] + 1, range[1 + offset] - 1), + {style: 'html', trim: true} ) + ); + let defined = definitionIdentifiers; + if (label === 'footnote') { + if (id.includes(' ')) return + defined = footnoteDefinitionIdentifiers; + id = id.slice(1); + } + if ( + (allowShortcutLink && range.length === 2) || + defined.has(id) || + strings.has(id) || + regexes.some(function (regex) { + return regex.test(id) + }) + ) { + return + } + const start = toPoint(range[0]); + const end = toPoint(range[range.length - 1]); + if (end && start) { + file.message( + 'Unexpected reference to undefined definition, expected corresponding definition (`' + + id.toLowerCase() + + '`) for ' + + (label === 'image' ? 'an' : 'a') + + ' ' + + label + + ' or escaped opening bracket (`\\[`) for regular text', + { + ancestors, + place: {start, end} + } + ); } } - ); - -const emptyOptions = {}; -function toString(value, options) { - const settings = options || emptyOptions; - const includeImageAlt = - typeof settings.includeImageAlt === 'boolean' - ? settings.includeImageAlt - : true; - const includeHtml = - typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true; - return one(value, includeImageAlt, includeHtml) -} -function one(value, includeImageAlt, includeHtml) { - if (node(value)) { - if ('value' in value) { - return value.type === 'html' && !includeHtml ? '' : value.value - } - if (includeImageAlt && 'alt' in value && value.alt) { - return value.alt - } - if ('children' in value) { - return all(value.children, includeImageAlt, includeHtml) - } - } - if (Array.isArray(value)) { - return all(value, includeImageAlt, includeHtml) - } - return '' -} -function all(values, includeImageAlt, includeHtml) { - const result = []; - let index = -1; - while (++index < values.length) { - result[index] = one(values[index], includeImageAlt, includeHtml); } - return result.join('') -} -function node(value) { - return Boolean(value && typeof value === 'object') -} +); +var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences; /** + * remark-lint rule to warn when unreferenced definitions are used. + * + * ## What is this? + * + * This package checks that definitions are referenced. + * * ## When should I use this? * - * You can use this package to check that inline constructs (links) are - * not padded. - * Historically, it was possible to pad emphasis, strong, and strikethrough - * too, but this was removed in CommonMark, making this rule much less useful. + * You can use this package to check definitions. * * ## API * + * ### `unified().use(remarkLintNoUnusedDefinitions)` + * + * Warn when unreferenced definitions are used. + * + * ###### Parameters + * * There are no options. * - * @module no-inline-padding - * @summary - * remark-lint rule to warn when inline constructs are padded. + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ## Recommendation + * + * Unused definitions do not contribute anything, so they can be removed. + * + * [api-remark-lint-no-unused-definitions]: #unifieduseremarklintnounuseddefinitions + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module no-unused-definitions * @author Titus Wormer - * @copyright 2015 Titus Wormer + * @copyright 2016 Titus Wormer * @license MIT * @example * {"name": "ok.md"} * - * Alpha [bravo](http://echo.fox/trot) + * [Mercury][] + * + * [mercury]: https://example.com/mercury/ * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * Alpha [ bravo ](http://echo.fox/trot) + * [mercury]: https://example.com/mercury/ * * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "output", "name": "not-ok.md"} * - * 1:7-1:38: Don’t pad `link` with inner spaces + * 1:1-1:40: Unexpected unused definition, expected no definition or one or more references to `mercury` + * + * @example + * {"gfm": true, "label": "input", "name": "gfm.md"} + * + * Mercury[^mercury] is a planet. + * + * [^Mercury]: + * **Mercury** is the first planet from the Sun and the smallest + * in the Solar System. + * [^Venus]: + * **Venus** is the second planet from + * the Sun. + * @example + * {"gfm": true, "label": "output", "name": "gfm.md"} + * + * 6:1-8:13: Unexpected unused footnote definition, expected no definition or one or more footnote references to `venus` */ -const remarkLintNoInlinePadding = lintRule( +const remarkLintNoUnusedDefinitions = lintRule$1( { - origin: 'remark-lint:no-inline-padding', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-inline-padding#readme' + origin: 'remark-lint:no-unused-definitions', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-unused-definitions#readme' }, - (tree, file) => { - visit$q(tree, (node) => { - if ( - (node.type === 'link' || node.type === 'linkReference') && - !generated(node) - ) { - const value = toString(node); - if (value.charAt(0) === ' ' || value.charAt(value.length - 1) === ' ') { - file.message('Don’t pad `' + node.type + '` with inner spaces', node); + function (tree, file) { + const footnoteDefinitions = new Map(); + const definitions = new Map(); + visitParents(tree, function (node, parents) { + if ('identifier' in node) { + const map = + node.type === 'footnoteDefinition' || + node.type === 'footnoteReference' + ? footnoteDefinitions + : definitions; + let entry = map.get(node.identifier); + if (!entry) { + entry = {ancestors: undefined, used: false}; + map.set(node.identifier, entry); + } + if (node.type === 'definition' || node.type === 'footnoteDefinition') { + entry.ancestors = [...parents, node]; + } else if ( + node.type === 'imageReference' || + node.type === 'linkReference' || + node.type === 'footnoteReference' + ) { + entry.used = true; } } }); - } -); -var remarkLintNoInlinePadding$1 = remarkLintNoInlinePadding; - -const convert$p = - ( - function (test) { - if (test === undefined || test === null) { - return ok$p - } - if (typeof test === 'string') { - return typeFactory$p(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$p(test) : propsFactory$p(test) - } - if (typeof test === 'function') { - return castFactory$p(test) + const entries = [...footnoteDefinitions.values(), ...definitions.values()]; + for (const entry of entries) { + if (!entry.used) { + ok$1(entry.ancestors); + const node = entry.ancestors.at(-1); + ok$1(node.type === 'footnoteDefinition' || node.type === 'definition'); + if (node.position) { + const prefix = node.type === 'footnoteDefinition' ? 'footnote ' : ''; + file.message( + 'Unexpected unused ' + + prefix + + 'definition, expected no definition or one or more ' + + prefix + + 'references to `' + + node.identifier + + '`', + {ancestors: entry.ancestors, place: node.position} + ); + } } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$p(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$p(tests[index]); - } - return castFactory$p(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$p(check) { - return castFactory$p(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false } - return true - } -} -function typeFactory$p(check) { - return castFactory$p(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$p(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) } -} -function ok$p() { - return true -} - -function color$q(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$p = true; -const EXIT$p = false; -const SKIP$p = 'skip'; -const visitParents$p = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$p(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$q(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$p(visitor(node, parents)); - if (result[0] === EXIT$p) { - return result - } - } - if (node.children && result[0] !== SKIP$p) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$p) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$p(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$p, value] - } - return [value] -} - -const visit$p = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$p(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintNoUnusedDefinitions$1 = remarkLintNoUnusedDefinitions; /** + * remark-lint rule to warn when ordered list markers are inconsistent. + * + * ## What is this? + * + * This package checks ordered list markers. + * * ## When should I use this? * - * You can use this package to check that collapsed or full reference images - * are used. + * You can use this package to check ordered lists. * * ## API * - * There are no options. + * ### `unified().use(remarkLintOrderedListMarkerStyle[, options])` + * + * Warn when ordered list markers are inconsistent. + * + * ###### Parameters + * + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — preferred style or whether to detect the first style and warn for + * further differences + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). + * + * ###### Type + * + * ```ts + * type Options = Style | 'consistent' + * ``` + * + * ### `Style` + * + * Style (TypeScript type). + * + * ###### Type + * + * ```ts + * type Style = '.' | ')' + * ``` * * ## Recommendation * - * Shortcut references use an implicit style that looks a lot like something - * that could occur as plain text instead of syntax. - * In some cases, plain text is intended instead of an image. - * Due to this, it’s recommended to use collapsed (or full) references - * instead. + * Parens for list markers were not supported in markdown before CommonMark. + * While they should work in most places now, + * not all markdown parsers follow CommonMark. + * So it’s recommended to prefer dots. * - * @module no-shortcut-reference-image - * @summary - * remark-lint rule to warn when shortcut reference images are used. + * ## Fix + * + * [`remark-stringify`][github-remark-stringify] formats ordered lists with + * dots by default. + * Pass `bulletOrdered: ')'` to always use parens. + * + * [api-style]: #style + * [api-options]: #options + * [api-remark-lint-ordered-list-marker-style]: #unifieduseremarklintorderedlistmarkerstyle-options + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module ordered-list-marker-style * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * ![foo][] + * 1. Mercury + * + * * Venus * - * [foo]: http://foo.bar/baz.png + * 1. Earth * * @example - * {"name": "not-ok.md", "label": "input"} + * {"name": "ok.md", "config": "."} * - * ![foo] + * 1. Mercury + * + * @example + * {"name": "ok.md", "config": ")"} * - * [foo]: http://foo.bar/baz.png + * 1) Mercury * * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "input", "name": "not-ok.md"} + * + * 1. Mercury + * + * 1) Venus * - * 1:1-1:7: Use the trailing [] on reference images + * @example + * {"label": "output", "name": "not-ok.md"} + * + * 3:2: Unexpected ordered list marker `)`, expected `.` + * + * @example + * {"name": "not-ok.md", "label": "output", "config": "🌍", "positionless": true} + * + * 1:1: Unexpected value `🌍` for `options`, expected `'.'`, `')'`, or `'consistent'` */ -const remarkLintNoShortcutReferenceImage = lintRule( +const remarkLintOrderedListMarkerStyle = lintRule$1( { - origin: 'remark-lint:no-shortcut-reference-image', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-image#readme' + origin: 'remark-lint:ordered-list-marker-style', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-ordered-list-marker-style#readme' }, - (tree, file) => { - visit$p(tree, 'imageReference', (node) => { - if (!generated(node) && node.referenceType === 'shortcut') { - file.message('Use the trailing [] on reference images', node); - } - }); - } -); -var remarkLintNoShortcutReferenceImage$1 = remarkLintNoShortcutReferenceImage; - -const convert$o = - ( - function (test) { - if (test === undefined || test === null) { - return ok$o - } - if (typeof test === 'string') { - return typeFactory$o(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$o(test) : propsFactory$o(test) - } - if (typeof test === 'function') { - return castFactory$o(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$o(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$o(tests[index]); - } - return castFactory$o(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$o(check) { - return castFactory$o(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false + function (tree, file, options) { + const value = String(file); + let expected; + let cause; + if (options === null || options === undefined || options === 'consistent') ; else if (options === '.' || options === ')') { + expected = options; + } else { + file.fail( + 'Unexpected value `' + + options + + "` for `options`, expected `'.'`, `')'`, or `'consistent'`" + ); } - return true - } -} -function typeFactory$o(check) { - return castFactory$o(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$o(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$o() { - return true -} - -function color$p(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$o = true; -const EXIT$o = false; -const SKIP$o = 'skip'; -const visitParents$o = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$o(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$p(node.type + (name ? '<' + name + '>' : '')) + ')' - }); + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'listItem') return + const parent = parents.at(-1); + if (!parent || parent.type !== 'list' || !parent.ordered) return + const start = pointStart(node); + if (start && typeof start.offset === 'number') { + let index = start.offset; + let code = value.charCodeAt(index); + while (asciiDigit(code)) { + index++; + code = value.charCodeAt(index); } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$o(visitor(node, parents)); - if (result[0] === EXIT$o) { - return result - } + const actual = + code === 41 ? ')' : code === 46 ? '.' : undefined; + if (!actual) return + const place = { + line: start.line, + column: start.column + (index - start.offset), + offset: start.offset + (index - start.offset) + }; + if (expected) { + if (actual !== expected) { + file.message( + 'Unexpected ordered list marker `' + + actual + + '`, expected `' + + expected + + '`', + {ancestors: [...parents, node], cause, place} + ); } - if (node.children && result[0] !== SKIP$o) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$o) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } else { + expected = actual; + cause = new VFileMessage( + 'Ordered list marker style `' + + expected + + "` first defined for `'consistent'` here", + { + ancestors: [...parents, node], + place, + ruleId: 'ordered-list-marker-style', + source: 'remark-lint' } - } - return result + ); } } - } - ); -function toResult$o(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$o, value] + }); } - return [value] -} +); +var remarkLintOrderedListMarkerStyle$1 = remarkLintOrderedListMarkerStyle; -const visit$o = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$o(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +const remarkPresetLintRecommended = { + plugins: [ + remarkLint, + remarkLintFinalNewline$1, + remarkLintListItemBulletIndent$1, + [remarkLintListItemIndent$1, 'one'], + remarkLintNoBlockquoteWithoutMarker$1, + remarkLintNoLiteralUrls$1, + [remarkLintOrderedListMarkerStyle$1, '.'], + remarkLintHardBreakSpaces$1, + remarkLintNoDuplicateDefinitions$1, + remarkLintNoHeadingContentIndent$1, + remarkLintNoShortcutReferenceImage$1, + remarkLintNoShortcutReferenceLink$1, + remarkLintNoUndefinedReferences$1, + remarkLintNoUnusedDefinitions$1 + ] +}; +var remarkPresetLintRecommended$1 = remarkPresetLintRecommended; /** + * remark-lint rule to warn when block quotes are indented too much or + * too little. + * + * ## What is this? + * + * This package checks the “indent” of block quotes: the `>` (greater than) + * marker *and* the spaces before content. + * * ## When should I use this? * - * You can use this package to check that collapsed or full reference links - * are used. + * You can use this rule to check markdown code style. * * ## API * - * There are no options. + * ### `unified().use(remarkLintBlockquoteIndentation[, options])` + * + * Warn when block quotes are indented too much or too little. + * + * ###### Parameters + * + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — either a preferred indent or whether to detect the first style + * and warn for further differences + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). + * + * ###### Type + * + * ```ts + * type Options = number | 'consistent' + * ``` * * ## Recommendation * - * Shortcut references use an implicit style that looks a lot like something - * that could occur as plain text instead of syntax. - * In some cases, plain text is intended instead of a link. - * Due to this, it’s recommended to use collapsed (or full) references - * instead. + * CommonMark specifies that when block quotes are used the `>` markers can be + * followed by an optional space. + * No space at all arguably looks rather ugly: * - * @module no-shortcut-reference-link - * @summary - * remark-lint rule to warn when shortcut reference links are used. + * ```markdown + * >Mars and + * >Venus. + * ``` + * + * There is no specific handling of more that one space, so if 5 spaces were + * used after `>`, then indented code kicks in: + * + * ```markdown + * > neptune() + * ``` + * + * Due to this, it’s recommended to configure this rule with `2`. + * + * [api-options]: #options + * [api-remark-lint-blockquote-indentation]: #unifieduseremarklintblockquoteindentation-options + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module blockquote-indentation * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example - * {"name": "ok.md"} + * {"config": 2, "name": "ok-2.md"} * - * [foo][] + * > Mercury. * - * [foo]: http://foo.bar/baz + * Venus. + * + * > Earth. * * @example - * {"name": "not-ok.md", "label": "input"} + * {"config": 4, "name": "ok-4.md"} * - * [foo] + * > Mercury. * - * [foo]: http://foo.bar/baz + * Venus. + * + * > Earth. * * @example - * {"name": "not-ok.md", "label": "output"} + * { "name": "ok-tab.md"} + * + * >␉Mercury. + * + * @example + * {"label": "input", "name": "not-ok.md"} + * + * > Mercury. + * + * Venus. + * + * > Earth. + * + * Mars. + * + * > Jupiter + * @example + * {"label": "output", "name": "not-ok.md"} + * + * 5:5: Unexpected `4` spaces between block quote marker and content, expected `3` spaces, remove `1` space + * 9:3: Unexpected `2` spaces between block quote marker and content, expected `3` spaces, add `1` space + * + * @example + * {"config": "🌍", "label": "output", "name": "not-ok-options.md", "positionless": true} * - * 1:1-1:6: Use the trailing `[]` on reference links + * 1:1: Unexpected value `🌍` for `options`, expected `number` or `'consistent'` */ -const remarkLintNoShortcutReferenceLink = lintRule( +const remarkLintBlockquoteIndentation = lintRule$1( { - origin: 'remark-lint:no-shortcut-reference-link', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-link#readme' + origin: 'remark-lint:blockquote-indentation', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-blockquote-indentation#readme' }, - (tree, file) => { - visit$o(tree, 'linkReference', (node) => { - if (!generated(node) && node.referenceType === 'shortcut') { - file.message('Use the trailing `[]` on reference links', node); + function (tree, file, options) { + let expected; + if (options === null || options === undefined || options === 'consistent') ; else if (typeof options === 'number') { + expected = options; + } else { + file.fail( + 'Unexpected value `' + + options + + "` for `options`, expected `number` or `'consistent'`" + ); + } + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'blockquote') return + const start = pointStart(node); + const headStart = pointStart(node.children[0]); + if (headStart && start) { + const actual = headStart.column - start.column; + if (expected) { + const difference = expected - actual; + const differenceAbsolute = Math.abs(difference); + if (difference !== 0) { + file.message( + 'Unexpected `' + + actual + + '` ' + + pluralize('space', actual) + + ' between block quote marker and content, expected `' + + expected + + '` ' + + pluralize('space', expected) + + ', ' + + (difference > 0 ? 'add' : 'remove') + + ' `' + + differenceAbsolute + + '` ' + + pluralize('space', differenceAbsolute), + {ancestors: [...parents, node], place: headStart} + ); + } + } else { + expected = actual; + } } }); } ); -var remarkLintNoShortcutReferenceLink$1 = remarkLintNoShortcutReferenceLink; - -function normalizeIdentifier(value) { - return ( - value - .replace(/[\t\n\r ]+/g, ' ') - .replace(/^ | $/g, '') - .toLowerCase() - .toUpperCase() - ) -} - -const convert$n = - ( - function (test) { - if (test === undefined || test === null) { - return ok$n - } - if (typeof test === 'string') { - return typeFactory$n(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$n(test) : propsFactory$n(test) - } - if (typeof test === 'function') { - return castFactory$n(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$n(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$n(tests[index]); - } - return castFactory$n(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$n(check) { - return castFactory$n(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$n(check) { - return castFactory$n(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$n(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$n() { - return true -} - -function color$o(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$n = true; -const EXIT$n = false; -const SKIP$n = 'skip'; -const visitParents$n = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$n(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$o(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$n(visitor(node, parents)); - if (result[0] === EXIT$n) { - return result - } - } - if (node.children && result[0] !== SKIP$n) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$n) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$n(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$n, value] - } - return [value] -} - -const visit$n = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$n(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var remarkLintBlockquoteIndentation$1 = remarkLintBlockquoteIndentation; /** + * remark-lint rule to warn when list item checkboxes violate a given + * style. + * + * ## What is this? + * + * This package checks the character used in checkboxes. + * * ## When should I use this? * - * You can use this package to check that referenced definitions are defined. + * You can use this package to check that the style of GFM tasklists is + * consistent. + * Task lists are a GFM feature enabled with + * [`remark-gfm`][github-remark-gfm]. * * ## API * - * The following options (default: `undefined`) are accepted: + * ### `unified().use(remarkLintCheckboxCharacterStyle[, options])` * - * * `Object` with the following fields: - * * `allow` (`Array`, - * default: `[]`) - * — text or regex that you want to be allowed between `[` and `]` - * even though it’s undefined; regex is provided via a `RegExp` object - * or via a `{source: string}` object where `source` is the source - * text of a case-insensitive regex - * - * ## Recommendation + * Warn when list item checkboxes violate a given style. * - * Shortcut references use an implicit syntax that could also occur as plain - * text. - * For example, it is reasonable to expect an author adding `[…]` to abbreviate - * some text somewhere in a document: + * ###### Parameters * - * ```markdown - * > Some […] quote. - * ``` + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — either preferred values or whether to detect the first styles + * and warn for further differences * - * This isn’t a problem, but it might become one when an author later adds a - * definition: + * ###### Returns * - * ```markdown - * Some text. […][] + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * […] #read-more "Read more" - * ``` + * ### `Options` * - * The second author might expect only their newly added text to form a link, - * but their changes also result in a link for the first author’s text. + * Configuration (TypeScript type). * - * @module no-undefined-references - * @summary - * remark-lint rule to warn when undefined definitions are referenced. - * @author Titus Wormer - * @copyright 2016 Titus Wormer - * @license MIT - * @example - * {"name": "ok.md"} + * ###### Type * - * [foo][] + * ```ts + * type Options = Styles | 'consistent' + * ``` * - * Just a [ bracket. + * ### `Styles` * - * Typically, you’d want to use escapes (with a backslash: \\) to escape what - * could turn into a \[reference otherwise]. + * Styles (TypeScript type). * - * Just two braces can’t link: []. + * ###### Fields * - * [foo]: https://example.com + * * `checked` (`'X'`, `'x'`, or `'consistent'`, default: `'consistent'`) + * — preferred style to use for checked checkboxes + * * `unchecked` (`'␉'` (a tab), `'␠'` (a space), or `'consistent'`, default: + * `'consistent'`) + * — preferred style to use for unchecked checkboxes * - * @example - * {"name": "ok-allow.md", "config": {"allow": ["...", "…"]}} + * ## Recommendation * - * > Eliding a portion of a quoted passage […] is acceptable. + * It’s recommended to set `options.checked` to `'x'` (a lowercase X) as it + * prevents an extra keyboard press and `options.unchecked` to `'␠'` (a space) + * to make all checkboxes align. * - * @example - * {"name": "ok-allow.md", "config": {"allow": ["a", {"source": "^b\\."}]}} + * ## Fix * - * [foo][b.c] + * [`remark-stringify`][github-remark-stringify] formats checked checkboxes + * using `'x'` (lowercase X) and unchecked checkboxes using `'␠'` (a space). * - * [bar][a] + * [api-options]: #options + * [api-remark-lint-checkbox-character-style]: #unifieduseremarklintcheckboxcharacterstyle-options + * [api-styles]: #styles + * [github-remark-gfm]: https://github.com/remarkjs/remark-gfm + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * - * Matching is case-insensitive: [bar][B.C] + * @module checkbox-character-style + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT * * @example - * {"name": "not-ok.md", "label": "input"} + * {"config": {"checked": "x"}, "gfm": true, "name": "ok-x.md"} * - * [bar] + * - [x] Mercury. + * - [x] Venus. * - * [baz][] + * @example + * {"config": {"checked": "X"}, "gfm": true, "name": "ok-x-upper.md"} * - * [text][qux] + * - [X] Mercury. + * - [X] Venus. * - * Spread [over - * lines][] + * @example + * {"config": {"unchecked": " "}, "gfm": true, "name": "ok-space.md"} * - * > in [a - * > block quote][] + * - [ ] Mercury. + * - [ ] Venus. + * - [ ]␠␠ + * - [ ] * - * [asd][a + * @example + * {"config": {"unchecked": "\t"}, "gfm": true, "name": "ok-tab.md"} * - * Can include [*emphasis*]. + * - [␉] Mercury. + * - [␉] Venus. * - * Multiple pairs: [a][b][c]. + * @example + * {"label": "input", "gfm": true, "name": "not-ok-default.md"} * + * - [x] Mercury. + * - [X] Venus. + * - [ ] Earth. + * - [␉] Mars. * @example - * {"name": "not-ok.md", "label": "output"} + * {"label": "output", "gfm": true, "name": "not-ok-default.md"} * - * 1:1-1:6: Found reference to undefined definition - * 3:1-3:8: Found reference to undefined definition - * 5:1-5:12: Found reference to undefined definition - * 7:8-8:9: Found reference to undefined definition - * 10:6-11:17: Found reference to undefined definition - * 13:1-13:6: Found reference to undefined definition - * 15:13-15:25: Found reference to undefined definition - * 17:17-17:23: Found reference to undefined definition - * 17:23-17:26: Found reference to undefined definition + * 2:5: Unexpected checked checkbox value `X`, expected `x` + * 4:5: Unexpected unchecked checkbox value `\t`, expected ` ` * * @example - * {"name": "not-ok.md", "label": "input", "config": {"allow": ["a", {"source": "^b\\."}]}} + * {"config": "🌍", "label": "output", "name": "not-ok-option.md", "positionless": true} * - * [foo][a.c] + * 1:1: Unexpected value `🌍` for `options`, expected an object or `'consistent'` * - * [bar][b] + * @example + * {"config": {"unchecked": "🌍"}, "label": "output", "name": "not-ok-option-unchecked.md", "positionless": true} + * + * 1:1: Unexpected value `🌍` for `options.unchecked`, expected `'\t'`, `' '`, or `'consistent'` * * @example - * {"name": "not-ok.md", "label": "output", "config": {"allow": ["a", {"source": "^b\\."}]}} + * {"config": {"checked": "🌍"}, "label": "output", "name": "not-ok-option-checked.md", "positionless": true} * - * 1:1-1:11: Found reference to undefined definition - * 3:1-3:9: Found reference to undefined definition + * 1:1: Unexpected value `🌍` for `options.checked`, expected `'X'`, `'x'`, or `'consistent'` */ -const remarkLintNoUndefinedReferences = lintRule( +const remarkLintCheckboxCharacterStyle = lintRule$1( { - origin: 'remark-lint:no-undefined-references', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-undefined-references#readme' + origin: 'remark-lint:checkbox-character-style', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-character-style#readme' }, - (tree, file, option = {}) => { - const contents = String(file); - const loc = location(file); - const lineEnding = /(\r?\n|\r)[\t ]*(>[\t ]*)*/g; - const map = Object.create(null); - const allow = option.allow || []; - const regexes = []; - const strings = new Set(); - let index = -1; - while (++index < allow.length) { - const value = allow[index]; - if (typeof value === 'string') { - strings.add(normalizeIdentifier(value)); - } else if (value instanceof RegExp) { - regexes.push(value); - } else { - regexes.push(new RegExp(value.source, 'i')); + function (tree, file, options) { + const value = String(file); + let checkedExpected; + let checkedConsistentCause; + let uncheckedExpected; + let uncheckedConsistentCause; + if (options === null || options === undefined || options === 'consistent') ; else if (typeof options === 'object') { + if (options.checked === 'X' || options.checked === 'x') { + checkedExpected = options.checked; + } else if (options.checked && options.checked !== 'consistent') { + file.fail( + 'Unexpected value `' + + options.checked + + "` for `options.checked`, expected `'X'`, `'x'`, or `'consistent'`" + ); + } + if (options.unchecked === '\t' || options.unchecked === ' ') { + uncheckedExpected = options.unchecked; + } else if (options.unchecked && options.unchecked !== 'consistent') { + file.fail( + 'Unexpected value `' + + options.unchecked + + "` for `options.unchecked`, expected `'\\t'`, `' '`, or `'consistent'`" + ); } + } else { + file.fail( + 'Unexpected value `' + + options + + "` for `options`, expected an object or `'consistent'`" + ); } - visit$n(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - map[normalizeIdentifier(node.identifier)] = true; + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP } - }); - visit$n(tree, (node) => { + if (node.type !== 'listItem') return + const head = node.children[0]; + const headStart = pointStart(head); if ( - (node.type === 'imageReference' || - node.type === 'linkReference' || - node.type === 'footnoteReference') && - !generated(node) && - !(normalizeIdentifier(node.identifier) in map) && - !isAllowed(node.identifier) + !head || + !headStart || + typeof node.checked !== 'boolean' || + typeof headStart.offset !== 'number' ) { - file.message('Found reference to undefined definition', node); - } - if (node.type === 'paragraph' || node.type === 'heading') { - findInPhrasing(node); + return } - }); - function findInPhrasing(node) { - let ranges = []; - visit$n(node, (child) => { - if (child === node) return - if (child.type === 'link' || child.type === 'linkReference') { - ranges = []; - return SKIP$n - } - if (child.type !== 'text') return - const start = pointStart(child).offset; - const end = pointEnd(child).offset; - if (typeof start !== 'number' || typeof end !== 'number') { - return EXIT$n - } - const source = contents.slice(start, end); - const lines = [[start, '']]; - let last = 0; - lineEnding.lastIndex = 0; - let match = lineEnding.exec(source); - while (match) { - const index = match.index; - lines[lines.length - 1][1] = source.slice(last, index); - last = index + match[0].length; - lines.push([start + last, '']); - match = lineEnding.exec(source); - } - lines[lines.length - 1][1] = source.slice(last); - let lineIndex = -1; - while (++lineIndex < lines.length) { - const line = lines[lineIndex][1]; - let index = 0; - while (index < line.length) { - const code = line.charCodeAt(index); - if (code === 92) { - const next = line.charCodeAt(index + 1); - index++; - if (next === 91 || next === 93) { - index++; - } - } - else if (code === 91) { - ranges.push([lines[lineIndex][0] + index]); - index++; - } - else if (code === 93) { - if (ranges.length === 0) { - index++; - } else if (line.charCodeAt(index + 1) === 91) { - index++; - let range = ranges.pop(); - if (range) { - range.push(lines[lineIndex][0] + index); - if (range.length === 4) { - handleRange(range); - range = []; - } - range.push(lines[lineIndex][0] + index); - ranges.push(range); - index++; - } - } else { - index++; - const range = ranges.pop(); - if (range) { - range.push(lines[lineIndex][0] + index); - handleRange(range); - } - } - } - else { - index++; - } + headStart.offset -= 2; + headStart.column -= 2; + const match = /\[([\t Xx])]/.exec( + value.slice(headStart.offset - 2, headStart.offset + 1) + ); + if (!match) return + const actual = match[1]; + const actualDisplay = actual === '\t' ? '\\t' : actual; + const expected = node.checked ? checkedExpected : uncheckedExpected; + const expectedDisplay = expected === '\t' ? '\\t' : expected; + if (!expected) { + const cause = new VFileMessage( + (node.checked ? 'C' : 'Unc') + + "hecked checkbox style `'" + + actualDisplay + + "'` first defined for `'consistent'` here", + { + ancestors: [...parents, node], + place: headStart, + ruleId: 'checkbox-character-style', + source: 'remark-lint' } + ); + if (node.checked) { + checkedExpected = (actual); + checkedConsistentCause = cause; + } else { + uncheckedExpected = (actual); + uncheckedConsistentCause = cause; } - }); - let index = -1; - while (++index < ranges.length) { - handleRange(ranges[index]); - } - return SKIP$n - function handleRange(range) { - if (range.length === 1) return - if (range.length === 3) range.length = 2; - if (range.length === 2 && range[0] + 2 === range[1]) return - const offset = range.length === 4 && range[2] + 2 !== range[3] ? 2 : 0; - const id = contents - .slice(range[0 + offset] + 1, range[1 + offset] - 1) - .replace(lineEnding, ' '); - const pos = { - start: loc.toPoint(range[0]), - end: loc.toPoint(range[range.length - 1]) - }; - if ( - !generated({position: pos}) && - !(normalizeIdentifier(id) in map) && - !isAllowed(id) - ) { - file.message('Found reference to undefined definition', pos); - } - } - } - function isAllowed(id) { - const normalized = normalizeIdentifier(id); - return ( - strings.has(normalized) || - regexes.some((regex) => regex.test(normalized)) - ) - } - } -); -var remarkLintNoUndefinedReferences$1 = remarkLintNoUndefinedReferences; - -const convert$m = - ( - function (test) { - if (test === undefined || test === null) { - return ok$m - } - if (typeof test === 'string') { - return typeFactory$m(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$m(test) : propsFactory$m(test) - } - if (typeof test === 'function') { - return castFactory$m(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$m(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$m(tests[index]); - } - return castFactory$m(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$m(check) { - return castFactory$m(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$m(check) { - return castFactory$m(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$m(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$m() { - return true -} - -function color$n(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$m = true; -const EXIT$m = false; -const SKIP$m = 'skip'; -const visitParents$m = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$m(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$n(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$m(visitor(node, parents)); - if (result[0] === EXIT$m) { - return result - } - } - if (node.children && result[0] !== SKIP$m) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$m) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + } else if (actual !== expected) { + file.message( + 'Unexpected ' + + (node.checked ? '' : 'un') + + 'checked checkbox value `' + + actualDisplay + + '`, expected `' + + expectedDisplay + + '`', + { + ancestors: [...parents, node], + cause: node.checked + ? checkedConsistentCause + : uncheckedConsistentCause, + place: headStart } - return result - } + ); } - } - ); -function toResult$m(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$m, value] + }); } - return [value] -} - -const visit$m = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$m(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintCheckboxCharacterStyle$1 = remarkLintCheckboxCharacterStyle; /** + * remark-lint rule to warn when GFM tasklist checkboxes are followed by + * more than one space. + * + * ## What is this? + * + * This package checks the space after checkboxes. + * * ## When should I use this? * - * You can use this package to check definitions are referenced. + * You can use this package to check that the style of GFM tasklists is + * a single space. * * ## API * - * There are no options. + * ### `unified().use(remarkLintCheckboxContentIndent)` + * + * Warn when GFM tasklist checkboxes are followed by more than one space. + * + * ###### Parameters + * + * There are no options. + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * * ## Recommendation * - * Unused definitions do not contribute anything, so they can be removed. + * GFM allows zero or more spaces and tabs after checkboxes. + * No space at all arguably looks rather ugly: * - * @module no-unused-definitions - * @summary - * remark-lint rule to warn when unreferenced definitions are used. + * ```markdown + * * [x]Pluto + * ``` + * + * More that one space is superfluous: + * + * ```markdown + * * [x] Jupiter + * ``` + * + * Due to this, it’s recommended to turn this rule on. + * + * ## Fix + * + * [`remark-stringify`][github-remark-stringify] formats checkboxes and the + * content after them with a single space between. + * + * [api-remark-lint-checkbox-content-indent]: #unifieduseremarklintcheckboxcontentindent + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module checkbox-content-indent * @author Titus Wormer - * @copyright 2016 Titus Wormer + * @copyright 2015 Titus Wormer * @license MIT + * * @example - * {"name": "ok.md"} + * {"gfm": true, "name": "ok.md"} * - * [foo][] + * - [ ] Mercury. + * + [x] Venus. + * * [X] Earth. + * - [ ] Mars. * - * [foo]: https://example.com + * @example + * {"gfm": true, "label": "input", "name": "not-ok.md"} * + * - [ ] Mercury. + * + [x] Venus. + * * [X] Earth. + * - [ ] Mars. * @example - * {"name": "not-ok.md", "label": "input"} + * {"gfm": true, "label": "output", "name": "not-ok.md"} * - * [bar]: https://example.com + * 2:8: Unexpected `2` spaces between checkbox and content, expected `1` space, remove `1` space + * 3:9: Unexpected `3` spaces between checkbox and content, expected `1` space, remove `2` spaces + * 4:10: Unexpected `4` spaces between checkbox and content, expected `1` space, remove `3` spaces * * @example - * {"name": "not-ok.md", "label": "output"} + * {"gfm": true, "label": "input", "name": "tab.md"} + * + * - [ ]␉Mercury. + * + [x]␉␉Venus. + * @example + * {"gfm": true, "label": "output", "name": "tab.md"} * - * 1:1-1:27: Found unused definition + * 2:8: Unexpected `2` spaces between checkbox and content, expected `1` space, remove `1` space */ -const own = {}.hasOwnProperty; -const remarkLintNoUnusedDefinitions = lintRule( +const remarkLintCheckboxContentIndent = lintRule$1( { - origin: 'remark-lint:no-unused-definitions', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-unused-definitions#readme' + origin: 'remark-lint:checkbox-content-indent', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-content-indent#readme' }, - (tree, file) => { - const map = Object.create(null); - visit$m(tree, (node) => { - if ( - (node.type === 'definition' || node.type === 'footnoteDefinition') && - !generated(node) - ) { - map[node.identifier.toUpperCase()] = {node, used: false}; + function (tree, file) { + const value = String(file); + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP } - }); - visit$m(tree, (node) => { + if (node.type !== 'listItem') return + const head = node.children[0]; + const headStart = pointStart(head); if ( - node.type === 'imageReference' || - node.type === 'linkReference' || - node.type === 'footnoteReference' + !head || + !headStart || + typeof node.checked !== 'boolean' || + typeof headStart.offset !== 'number' ) { - const info = map[node.identifier.toUpperCase()]; - if (!generated(node) && info) { - info.used = true; - } - } - }); - let identifier; - for (identifier in map) { - if (own.call(map, identifier)) { - const entry = map[identifier]; - if (!entry.used) { - file.message('Found unused definition', entry.node); - } - } - } - } -); -var remarkLintNoUnusedDefinitions$1 = remarkLintNoUnusedDefinitions; - -const remarkPresetLintRecommended = { - plugins: [ - remarkLint, - remarkLintFinalNewline$1, - remarkLintListItemBulletIndent$1, - [remarkLintListItemIndent$1, 'tab-size'], - remarkLintNoBlockquoteWithoutMarker$1, - remarkLintNoLiteralUrls$1, - [remarkLintOrderedListMarkerStyle$1, '.'], - remarkLintHardBreakSpaces$1, - remarkLintNoDuplicateDefinitions$1, - remarkLintNoHeadingContentIndent$1, - remarkLintNoInlinePadding$1, - remarkLintNoShortcutReferenceImage$1, - remarkLintNoShortcutReferenceLink$1, - remarkLintNoUndefinedReferences$1, - remarkLintNoUnusedDefinitions$1 - ] -}; -var remarkPresetLintRecommended$1 = remarkPresetLintRecommended; - -const convert$l = - ( - function (test) { - if (test === undefined || test === null) { - return ok$l - } - if (typeof test === 'string') { - return typeFactory$l(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$l(test) : propsFactory$l(test) + return } - if (typeof test === 'function') { - return castFactory$l(test) + const match = /\[([\t xX])]/.exec( + value.slice(headStart.offset - 4, headStart.offset + 1) + ); + if (!match) return + let final = headStart.offset; + let code = value.charCodeAt(final); + while (code === 9 || code === 32) { + final++; + code = value.charCodeAt(final); } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$l(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$l(tests[index]); - } - return castFactory$l(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$l(check) { - return castFactory$l(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$l(check) { - return castFactory$l(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$l(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$l() { - return true -} - -function color$m(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$l = true; -const EXIT$l = false; -const SKIP$l = 'skip'; -const visitParents$l = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$l(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$m(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$l(visitor(node, parents)); - if (result[0] === EXIT$l) { - return result - } - } - if (node.children && result[0] !== SKIP$l) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$l) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; + const size = final - headStart.offset; + if (size) { + file.message( + 'Unexpected `' + + (size + 1) + + '` ' + + pluralize('space', size + 1) + + ' between checkbox and content, expected `1` space, remove `' + + size + + '` ' + + pluralize('space', size), + { + ancestors: [...parents, node], + place: { + line: headStart.line, + column: headStart.column + size, + offset: headStart.offset + size } } - return result - } + ); } - } - ); -function toResult$l(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$l, value] + }); } - return [value] -} - -const visit$l = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$l(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintCheckboxContentIndent$1 = remarkLintCheckboxContentIndent; /** + * remark-lint rule to warn when code blocks violate a given style. + * + * ## What is this? + * + * This package checks the style of code blocks. + * * ## When should I use this? * - * You can use this package to check that the “indent” of block quotes is + * You can use this package to check that the style of code blocks is * consistent. - * Indent here is the `>` (greater than) marker and the spaces before content. * * ## API * - * The following options (default: `'consistent'`) are accepted: + * ### `unified().use(remarkLintCodeBlockStyle[, options])` * - * * `number` (example: `2`) - * — preferred indent of `>` and spaces before content - * * `'consistent'` - * — detect the first used style and warn when further block quotes differ + * Warn when code blocks violate a given style. * - * ## Recommendation + * ###### Parameters * - * CommonMark specifies that when block quotes are used the `>` markers can be - * followed by an optional space. - * No space at all arguably looks rather ugly: + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — preferred style or whether to detect the first style and warn for + * further differences * - * ```markdown - * >Mars and - * >Venus. + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). + * + * ###### Type + * + * ```ts + * type Options = Style | 'consistent' * ``` * - * There is no specific handling of more that one space, so if 5 spaces were - * used after `>`, then indented code kicks in: + * ### `Style` * - * ```markdown - * > neptune() + * Style (TypeScript type). + * + * ###### Type + * + * ```ts + * type Style = 'indented' | 'fenced' * ``` * - * Due to this, it’s recommended to configure this rule with `2`. + * ## Recommendation * - * @module blockquote-indentation - * @summary - * remark-lint rule to warn when block quotes are indented too much or - * too little. + * Indentation in markdown is complex as lists and indented code interfere in + * unexpected ways. + * Fenced code has more features than indented code: it can specify a + * programming language. + * Since CommonMark took the idea of fenced code from GFM, + * fenced code became widely supported. + * Due to this, it’s recommended to configure this rule with `'fenced'`. + * + * ## Fix + * + * [`remark-stringify`][github-remark-stringify] always formats code blocks as + * fenced. + * Pass `fences: false` to only use fenced code blocks when they have a + * language and as indented code otherwise. + * + * [api-options]: #options + * [api-remark-lint-code-block-style]: #unifieduseremarklintcodeblockstyle-options + * [api-style]: #style + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module code-block-style * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example - * {"name": "ok.md", "config": 4} + * {"config": "indented", "name": "ok-indented.md"} + * + * venus() * - * > Hello + * Mercury. * - * Paragraph. + * earth() * - * > World * @example - * {"name": "ok.md", "config": 2} + * {"config": "fenced", "name": "ok-fenced.md"} * - * > Hello + * ``` + * venus() + * ``` * - * Paragraph. + * Mercury. * - * > World + * ``` + * earth() + * ``` * * @example - * {"name": "not-ok.md", "label": "input"} + * {"label": "input", "name": "not-ok-consistent.md"} + * + * venus() * - * > Hello + * Mercury. * - * Paragraph. + * ``` + * earth() + * ``` + * @example + * {"label": "output", "name": "not-ok-consistent.md"} + * + * 5:1-7:4: Unexpected fenced code block, expected indented code blocks + * + * @example + * {"config": "indented", "label": "input", "name": "not-ok-indented.md"} + * + * ``` + * venus() + * ``` * - * > World + * Mercury. * - * Paragraph. + * ``` + * earth() + * ``` + * @example + * {"config": "indented", "label": "output", "name": "not-ok-indented.md"} * - * > World + * 1:1-3:4: Unexpected fenced code block, expected indented code blocks + * 7:1-9:4: Unexpected fenced code block, expected indented code blocks * * @example - * {"name": "not-ok.md", "label": "output"} + * {"config": "fenced", "label": "input", "name": "not-ok-fenced.md"} + * + * venus() + * + * Mercury. + * + * earth() * - * 5:5: Remove 1 space between block quote and content - * 9:3: Add 1 space between block quote and content + * @example + * {"config": "fenced", "label": "output", "name": "not-ok-fenced.md"} + * + * 1:1-1:12: Unexpected indented code block, expected fenced code blocks + * 5:1-5:12: Unexpected indented code block, expected fenced code blocks + * + * @example + * {"config": "🌍", "label": "output", "name": "not-ok-options.md", "positionless": true} + * + * 1:1: Unexpected value `🌍` for `options`, expected `'fenced'`, `'indented'`, or `'consistent'` */ -const remarkLintBlockquoteIndentation = lintRule( +const remarkLintCodeBlockStyle = lintRule$1( { - origin: 'remark-lint:blockquote-indentation', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-blockquote-indentation#readme' + origin: 'remark-lint:code-block-style', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-code-block-style#readme' }, - (tree, file, option = 'consistent') => { - visit$l(tree, 'blockquote', (node) => { - if (generated(node) || node.children.length === 0) { + function (tree, file, options) { + const value = String(file); + let cause; + let expected; + if (options === null || options === undefined || options === 'consistent') ; else if (options === 'indented' || options === 'fenced') { + expected = options; + } else { + file.fail( + 'Unexpected value `' + + options + + "` for `options`, expected `'fenced'`, `'indented'`, or `'consistent'`" + ); + } + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'code') return + const end = pointEnd(node); + const start = pointStart(node); + if ( + !start || + !end || + typeof start.offset !== 'number' || + typeof end.offset !== 'number' + ) { return } - if (option === 'consistent') { - option = check(node); - } else { - const diff = option - check(node); - if (diff !== 0) { - const abs = Math.abs(diff); + const actual = + node.lang || /^ {0,3}([`~])/.test(value.slice(start.offset, end.offset)) + ? 'fenced' + : 'indented'; + if (expected) { + if (expected !== actual) { file.message( - (diff > 0 ? 'Add' : 'Remove') + - ' ' + - abs + - ' ' + - plural('space', abs) + - ' between block quote and content', - pointStart(node.children[0]) + 'Unexpected ' + + actual + + ' code block, expected ' + + expected + + ' code blocks', + {ancestors: [...parents, node], cause, place: {start, end}} ); } + } else { + expected = actual; + cause = new VFileMessage( + "Code block style `'" + + actual + + "'` first defined for `'consistent'` here", + { + ancestors: [...parents, node], + place: {start, end}, + source: 'remark-lint', + ruleId: 'code-block-style' + } + ); } }); } ); -var remarkLintBlockquoteIndentation$1 = remarkLintBlockquoteIndentation; -function check(node) { - return pointStart(node.children[0]).column - pointStart(node).column -} - -const convert$k = - ( - function (test) { - if (test === undefined || test === null) { - return ok$k - } - if (typeof test === 'string') { - return typeFactory$k(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$k(test) : propsFactory$k(test) - } - if (typeof test === 'function') { - return castFactory$k(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$k(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$k(tests[index]); - } - return castFactory$k(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$k(check) { - return castFactory$k(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$k(check) { - return castFactory$k(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$k(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$k() { - return true -} - -function color$l(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$k = true; -const EXIT$k = false; -const SKIP$k = 'skip'; -const visitParents$k = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$k(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$l(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$k(visitor(node, parents)); - if (result[0] === EXIT$k) { - return result - } - } - if (node.children && result[0] !== SKIP$k) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$k) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$k(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$k, value] - } - return [value] -} - -const visit$k = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$k(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var remarkLintCodeBlockStyle$1 = remarkLintCodeBlockStyle; /** + * remark-lint rule to warn when consecutive whitespace is used in + * a definition label. + * + * ## What is this? + * + * This package checks the whitepsace in definition labels. + * + * GFM footnotes are not affected by this rule as footnote labels cannot + * contain whitespace. + * * ## When should I use this? * - * You can use this package to check that the style of GFM tasklists is - * consistent. + * You can use this package to check that definition labels are consistent. * * ## API * - * The following options (default: `'consistent'`) are accepted: + * ### `unified().use(remarkLintDefinitionSpacing)` * - * * `Object` with the following fields: - * * `checked` (`'x'`, `'X'`, or `'consistent'`, default: `'consistent'`) - * — preferred character to use for checked checkboxes - * * `unchecked` (`'·'` (a space), `'»'` (a tab), or `'consistent'`, - * default: `'consistent'`) - * — preferred character to use for unchecked checkboxes - * * `'consistent'` - * — detect the first used styles and warn when further checkboxes differ + * Warn when consecutive whitespace is used in a definition label. * - * ## Recommendation + * ###### Parameters * - * It’s recommended to set `options.checked` to `'x'` (a lowercase X) as it - * prevents an extra keyboard press and `options.unchecked` to `'·'` (a space) - * to make all checkboxes align. + * There are no options. * - * ## Fix + * ###### Returns * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats checked checkboxes using `'x'` (lowercase X) and unchecked checkboxes - * using `'·'` (a space). + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * @module checkbox-character-style - * @summary - * remark-lint rule to warn when list item checkboxes violate a given - * style. - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @example - * {"name": "ok.md", "config": {"checked": "x"}, "gfm": true} + * ## Recommendation * - * - [x] List item - * - [x] List item + * Definitions and references are matched together by collapsing whitespace. + * Using more whitespace in labels might incorrectly indicate that they are of + * importance. + * Due to this, it’s recommended to use one space and turn this rule on. * - * @example - * {"name": "ok.md", "config": {"checked": "X"}, "gfm": true} + * [api-remark-lint-definition-spacing]: #unifieduseremarklintdefinitionspacing + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * - * - [X] List item - * - [X] List item + * @module definition-spacing + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT * * @example - * {"name": "ok.md", "config": {"unchecked": " "}, "gfm": true} - * - * - [ ] List item - * - [ ] List item - * - [ ]·· - * - [ ] + * {"name": "ok.md"} * - * @example - * {"name": "ok.md", "config": {"unchecked": "\t"}, "gfm": true} + * The first planet is [planet mercury][]. * - * - [»] List item - * - [»] List item + * [planet mercury]: http://example.com * * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} - * - * - [x] List item - * - [X] List item - * - [ ] List item - * - [»] List item + * {"label": "input", "name": "not-ok-consecutive.md"} * + * [planet␠␠␠␠mercury]: http://example.com * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} + * {"label": "output", "name": "not-ok-consecutive.md"} * - * 2:5: Checked checkboxes should use `x` as a marker - * 4:5: Unchecked checkboxes should use ` ` as a marker + * 1:1-1:40: Unexpected `4` consecutive spaces in definition label, expected `1` space, remove `3` spaces * * @example - * {"config": {"unchecked": "💩"}, "name": "not-ok.md", "label": "output", "positionless": true, "gfm": true} - * - * 1:1: Incorrect unchecked checkbox marker `💩`: use either `'\t'`, or `' '` + * {"label": "input", "name": "not-ok-non-space.md"} * + * [pla␉net␊mer␍cury]: http://e.com * @example - * {"config": {"checked": "💩"}, "name": "not-ok.md", "label": "output", "positionless": true, "gfm": true} + * {"label": "output", "name": "not-ok-non-space.md"} * - * 1:1: Incorrect checked checkbox marker `💩`: use either `'x'`, or `'X'` + * 1:1-3:20: Unexpected non-space whitespace character `\t` in definition label, expected `1` space, replace it + * 1:1-3:20: Unexpected non-space whitespace character `\n` in definition label, expected `1` space, replace it + * 1:1-3:20: Unexpected non-space whitespace character `\r` in definition label, expected `1` space, replace it */ -const remarkLintCheckboxCharacterStyle = lintRule( +const remarkLintDefinitionSpacing = lintRule$1( { - origin: 'remark-lint:checkbox-character-style', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-character-style#readme' + origin: 'remark-lint:definition-spacing', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-definition-spacing#readme' }, - (tree, file, option = 'consistent') => { - const value = String(file); - let checked = 'consistent'; - let unchecked = 'consistent'; - if (typeof option === 'object') { - checked = option.checked || 'consistent'; - unchecked = option.unchecked || 'consistent'; - } - if (unchecked !== 'consistent' && unchecked !== ' ' && unchecked !== '\t') { - file.fail( - 'Incorrect unchecked checkbox marker `' + - unchecked + - "`: use either `'\\t'`, or `' '`" - ); - } - if (checked !== 'consistent' && checked !== 'x' && checked !== 'X') { - file.fail( - 'Incorrect checked checkbox marker `' + - checked + - "`: use either `'x'`, or `'X'`" - ); - } - visit$k(tree, 'listItem', (node) => { - const head = node.children[0]; - const point = pointStart(head); - if ( - typeof node.checked !== 'boolean' || - !head || - typeof point.offset !== 'number' - ) { - return - } - point.offset -= 2; - point.column -= 2; - const match = /\[([\t Xx])]/.exec( - value.slice(point.offset - 2, point.offset + 1) - ); - if (!match) return - const style = node.checked ? checked : unchecked; - if (style === 'consistent') { - if (node.checked) { - checked = match[1]; - } else { - unchecked = match[1]; + function (tree, file) { + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type === 'definition' && node.position && node.label) { + const size = longestStreak(node.label, ' '); + if (size > 1) { + file.message( + 'Unexpected `' + + size + + '` consecutive spaces in definition label, expected `1` space, remove `' + + (size - 1) + + '` ' + + pluralize('space', size - 1), + {ancestors: [...parents, node], place: node.position} + ); + } + const disallowed = []; + if (node.label.includes('\t')) disallowed.push('\\t'); + if (node.label.includes('\n')) disallowed.push('\\n'); + if (node.label.includes('\r')) disallowed.push('\\r'); + for (const disallow of disallowed) { + file.message( + 'Unexpected non-space whitespace character `' + + disallow + + '` in definition label, expected `1` space, replace it', + {ancestors: [...parents, node], place: node.position} + ); } - } else if (match[1] !== style) { - file.message( - (node.checked ? 'Checked' : 'Unchecked') + - ' checkboxes should use `' + - style + - '` as a marker', - point - ); } }); } ); -var remarkLintCheckboxCharacterStyle$1 = remarkLintCheckboxCharacterStyle; - -const convert$j = - ( - function (test) { - if (test === undefined || test === null) { - return ok$j - } - if (typeof test === 'string') { - return typeFactory$j(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$j(test) : propsFactory$j(test) - } - if (typeof test === 'function') { - return castFactory$j(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$j(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$j(tests[index]); - } - return castFactory$j(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$j(check) { - return castFactory$j(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$j(check) { - return castFactory$j(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$j(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$j() { - return true -} - -function color$k(d) { - return '\u001B[33m' + d + '\u001B[39m' -} +var remarkLintDefinitionSpacing$1 = remarkLintDefinitionSpacing; -const CONTINUE$j = true; -const EXIT$j = false; -const SKIP$j = 'skip'; -const visitParents$j = +const quotation = ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$j(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$k(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$j(visitor(node, parents)); - if (result[0] === EXIT$j) { - return result - } - } - if (node.children && result[0] !== SKIP$j) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$j) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result + function (value, open, close) { + const start = open || '"'; + const end = close || start; + let index = -1; + if (Array.isArray(value)) { + const list = (value); + const result = []; + while (++index < list.length) { + result[index] = start + list[index] + end; } + return result } - } - ); -function toResult$j(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$j, value] - } - return [value] -} - -const visit$j = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$j(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) + if (typeof value === 'string') { + return start + value + end } + throw new TypeError('Expected string or array of strings') } ); /** + * remark-lint rule to warn when language flags of fenced code + * are not used. + * + * ## What is this? + * + * This package checks the language flags of fenced code blocks, + * whether they exist, + * and optionally what values they hold. + * * ## When should I use this? * - * You can use this package to check that the “indent” after a GFM tasklist - * checkbox is a single space. + * You can use this package to check that the style of language flags of fenced + * code blocks is consistent. * * ## API * - * There are no accepted options. + * ### `unified().use(remarkLintFencedCodeFlag[, options])` * - * ## Recommendation + * Warn when language flags of fenced code are not used. * - * GFM allows zero or more spaces and tabs after checkboxes. - * No space at all arguably looks rather ugly: + * ###### Parameters * - * ```markdown - * * [x]Pluto - * ``` + * * `options` ([`Options`][api-options] or `Array`, optional) + * — configuration or flags to allow * - * More that one space is superfluous: + * ###### Returns * - * ```markdown - * * [x] Jupiter - * ``` + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * Due to this, it’s recommended to turn this rule on. + * ### `Options` * - * ## Fix + * Configuration (TypeScript type). * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats checkboxes and the content after them with a single space between. + * ###### Fields * - * @module checkbox-content-indent - * @summary - * remark-lint rule to warn when GFM tasklist checkboxes are followed by - * more than one space. + * * `allowEmpty` (`boolean`, default: `false`) + * — allow language flags to be omitted + * * `flags` (`Array`, optional) + * — flags to allow, + * other flags will result in a warning + * + * ## Recommendation + * + * While omitting language flags is fine to signal that code is plain text, + * it *could* point to a mistake. + * It’s recommended to instead use a certain flag for plain text (such as + * `txt`) and to turn this rule on. + * + * [api-options]: #options + * [api-remark-lint-fenced-code-flag]: #unifieduseremarklintfencedcodeflag-options + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module fenced-code-flag * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example - * {"name": "ok.md", "gfm": true} + * {"name": "ok.md"} * - * - [ ] List item - * + [x] List Item - * * [X] List item - * - [ ] List item + * Some markdown: + * + * ```markdown + * # Mercury + * ``` * * @example - * {"name": "not-ok.md", "label": "input", "gfm": true} + * {"label": "input", "name": "not-ok.md"} + * + * ``` + * mercury() + * ``` + * @example + * {"label": "output", "name": "not-ok.md"} * - * - [ ] List item - * + [x] List item - * * [X] List item - * - [ ] List item + * 1:1-3:4: Unexpected missing fenced code language flag in info string, expected keyword * * @example - * {"name": "not-ok.md", "label": "output", "gfm": true} + * {"config": {"allowEmpty": true}, "name": "ok-allow-empty.md"} + * + * ``` + * mercury() + * ``` + * + * @example + * {"config": {"allowEmpty": false}, "label": "input", "name": "not-ok-allow-empty.md"} + * + * ``` + * mercury() + * ``` + * @example + * {"config": {"allowEmpty": false}, "label": "output", "name": "not-ok-allow-empty.md"} + * + * 1:1-3:4: Unexpected missing fenced code language flag in info string, expected keyword + * + * @example + * {"config": ["markdown"], "name": "ok-array.md"} + * + * ```markdown + * # Mercury + * ``` + * + * @example + * {"config": {"flags":["markdown"]}, "name": "ok-options.md"} + * + * ```markdown + * # Mercury + * ``` + * + * @example + * {"config": ["markdown"], "label": "input", "name": "not-ok-array.md"} + * + * ```javascript + * mercury() + * ``` + * @example + * {"config": ["markdown"], "label": "output", "name": "not-ok-array.md"} + * + * 1:1-3:4: Unexpected fenced code language flag `javascript` in info string, expected `markdown` + * + * @example + * {"config": ["javascript", "markdown", "mdx", "typescript"], "label": "input", "name": "not-ok-long-array.md"} + * + * ```html + *

Mercury

+ * ``` + * @example + * {"config": ["javascript", "markdown", "mdx", "typescript"], "label": "output", "name": "not-ok-long-array.md"} + * + * 1:1-3:4: Unexpected fenced code language flag `html` in info string, expected `javascript`, `markdown`, `mdx`, … * - * 2:7-2:8: Checkboxes should be followed by a single character - * 3:7-3:9: Checkboxes should be followed by a single character - * 4:7-4:10: Checkboxes should be followed by a single character + * @example + * {"config": "🌍", "label": "output", "name": "not-ok-options.md", "positionless": true} + * + * 1:1: Unexpected value `🌍` for `options`, expected array or object */ -const remarkLintCheckboxContentIndent = lintRule( +const fence = /^ {0,3}([~`])\1{2,}/; +const listFormat$1 = new Intl.ListFormat('en', {type: 'disjunction'}); +const listFormatUnit$1 = new Intl.ListFormat('en', {type: 'unit'}); +const remarkLintFencedCodeFlag = lintRule$1( { - origin: 'remark-lint:checkbox-content-indent', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-content-indent#readme' + origin: 'remark-lint:fenced-code-flag', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-flag#readme' }, - (tree, file) => { + function (tree, file, options) { const value = String(file); - const loc = location(file); - visit$j(tree, 'listItem', (node) => { - const head = node.children[0]; - const point = pointStart(head); - if ( - typeof node.checked !== 'boolean' || - !head || - typeof point.offset !== 'number' - ) { - return + let allowEmpty = false; + let allowed; + if (options === null || options === undefined) ; else if (typeof options === 'object') { + if (Array.isArray(options)) { + const flags = (options); + allowed = flags; + } else { + const settings = (options); + allowEmpty = settings.allowEmpty === true; + if (settings.flags) { + allowed = settings.flags; + } } - const match = /\[([\t xX])]/.exec( - value.slice(point.offset - 4, point.offset + 1) + } else { + file.fail( + 'Unexpected value `' + + options + + '` for `options`, expected array or object' ); - if (!match) return - const initial = point.offset; - let final = initial; - while (/[\t ]/.test(value.charAt(final))) final++; - if (final - initial > 0) { - file.message('Checkboxes should be followed by a single character', { - start: loc.toPoint(initial), - end: loc.toPoint(final) - }); - } - }); - } -); -var remarkLintCheckboxContentIndent$1 = remarkLintCheckboxContentIndent; - -const convert$i = - ( - function (test) { - if (test === undefined || test === null) { - return ok$i - } - if (typeof test === 'string') { - return typeFactory$i(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$i(test) : propsFactory$i(test) - } - if (typeof test === 'function') { - return castFactory$i(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$i(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$i(tests[index]); - } - return castFactory$i(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true } - return false - } -} -function propsFactory$i(check) { - return castFactory$i(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false + let allowedDisplay; + if (allowed) { + allowedDisplay = + allowed.length > 3 + ? listFormatUnit$1.format([...quotation(allowed.slice(0, 3), '`'), '…']) + : listFormat$1.format(quotation(allowed, '`')); + } else { + allowedDisplay = 'keyword'; } - return true - } -} -function typeFactory$i(check) { - return castFactory$i(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$i(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$i() { - return true -} - -function color$j(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$i = true; -const EXIT$i = false; -const SKIP$i = 'skip'; -const visitParents$i = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$i(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$j(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$i(visitor(node, parents)); - if (result[0] === EXIT$i) { - return result - } + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'code') return + const end = pointEnd(node); + const start = pointStart(node); + if ( + end && + start && + typeof end.offset === 'number' && + typeof start.offset === 'number' + ) { + if (node.lang) { + if (allowed && !allowed.includes(node.lang)) { + file.message( + 'Unexpected fenced code language flag `' + + node.lang + + '` in info string, expected ' + + allowedDisplay, + {ancestors: [...parents, node], place: node.position} + ); } - if (node.children && result[0] !== SKIP$i) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$i) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + } else if (!allowEmpty) { + const slice = value.slice(start.offset, end.offset); + if (fence.test(slice)) { + file.message( + 'Unexpected missing fenced code language flag in info string, expected ' + + allowedDisplay, + {ancestors: [...parents, node], place: node.position} + ); } - return result } } - } - ); -function toResult$i(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$i, value] + }); } - return [value] -} - -const visit$i = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$i(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintFencedCodeFlag$1 = remarkLintFencedCodeFlag; /** + * remark-lint rule to warn when fenced code markers are + * inconsistent. + * + * ## What is this? + * + * This package checks fenced code block markers. + * * ## When should I use this? * - * You can use this package to check that code blocks are consistent. + * You can use this package to check that fenced code block markers are + * consistent. * * ## API * - * The following options (default: `'consistent'`) are accepted: - * - * * `'fenced'` - * — prefer fenced code blocks: - * ````markdown - * ```js - * code() - * ``` - * ```` - * * `'indented'` - * — prefer indented code blocks: - * ```markdown - * code() - * ``` - * * `'consistent'` - * — detect the first used style and warn when further code blocks differ + * ### `unified().use(remarkLintFencedCodeMarker[, options])` * - * ## Recommendation + * Warn when fenced code markers are inconsistent. * - * Indentation in markdown is complex, especially because lists and indented - * code can interfere in unexpected ways. - * Fenced code has more features than indented code: importantly, specifying a - * programming language. - * Since CommonMark took the idea of fenced code from GFM, fenced code became - * widely supported. - * Due to this, it’s recommended to configure this rule with `'fenced'`. + * ###### Parameters * - * ## Fix + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — preferred style or whether to detect the first style and warn for + * further differences * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats code blocks as fenced code when they have a language flag and as - * indented code otherwise. - * Pass - * [`fences: true`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#optionsfences) - * to always use fenced code. + * ###### Returns * - * @module code-block-style - * @summary - * remark-lint rule to warn when code blocks violate a given style. - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * @example - * {"config": "indented", "name": "ok.md"} + * ### `Marker` * - * alpha() + * Marker (TypeScript type). * - * Paragraph. + * ###### Type * - * bravo() + * ```ts + * type Marker = '`' | '~' + * ``` * - * @example - * {"config": "indented", "name": "not-ok.md", "label": "input"} + * ### `Options` * - * ``` - * alpha() - * ``` + * Configuration (TypeScript type). * - * Paragraph. + * ###### Type * - * ``` - * bravo() - * ``` + * ```ts + * type Options = Marker | 'consistent' + * ``` + * + * ## Recommendation + * + * Tildes are uncommon. + * So it’s recommended to configure this rule with ``'`'``. + * + * ## Fix + * + * [`remark-stringify`][github-remark-stringify] formats fenced code with grave + * accents by default. + * Pass `fence: '~'` to always use tildes. + * + * [api-marker]: #marker + * [api-options]: #options + * [api-remark-lint-fenced-code-marker]: #unifieduseremarklintfencedcodemarker-options + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module fenced-code-marker + * @author Titus Wormer + * @copyright 2015 Titus Wormer + * @license MIT * * @example - * {"config": "indented", "name": "not-ok.md", "label": "output"} + * {"name": "ok-indented.md"} + * + * Indented code blocks are not affected by this rule: * - * 1:1-3:4: Code blocks should be indented - * 7:1-9:4: Code blocks should be indented + * mercury() * * @example - * {"config": "fenced", "name": "ok.md"} + * {"config": "`", "name": "ok-tick.md"} * - * ``` - * alpha() + * ```javascript + * mercury() * ``` * - * Paragraph. - * * ``` - * bravo() + * venus() * ``` * * @example - * {"config": "fenced", "name": "not-ok-fenced.md", "label": "input"} - * - * alpha() + * {"config": "~", "name": "ok-tilde.md"} * - * Paragraph. + * ~~~javascript + * mercury() + * ~~~ * - * bravo() + * ~~~ + * venus() + * ~~~ * * @example - * {"config": "fenced", "name": "not-ok-fenced.md", "label": "output"} + * {"label": "input", "name": "not-ok-consistent-tick.md"} * - * 1:1-1:12: Code blocks should be fenced - * 5:1-5:12: Code blocks should be fenced + * ```javascript + * mercury() + * ``` * + * ~~~ + * venus() + * ~~~ * @example - * {"name": "not-ok-consistent.md", "label": "input"} + * {"label": "output", "name": "not-ok-consistent-tick.md"} * - * alpha() + * 5:1-7:4: Unexpected fenced code marker `~`, expected `` ` `` * - * Paragraph. + * @example + * {"label": "input", "name": "not-ok-consistent-tilde.md"} + * + * ~~~javascript + * mercury() + * ~~~ * * ``` - * bravo() + * venus() * ``` - * * @example - * {"name": "not-ok-consistent.md", "label": "output"} + * {"label": "output", "name": "not-ok-consistent-tilde.md"} * - * 5:1-7:4: Code blocks should be indented + * 5:1-7:4: Unexpected fenced code marker `` ` ``, expected `~` * * @example - * {"config": "💩", "name": "not-ok-incorrect.md", "label": "output", "positionless": true} + * {"config": "🌍", "label": "output", "name": "not-ok-incorrect.md", "positionless": true} * - * 1:1: Incorrect code block style `💩`: use either `'consistent'`, `'fenced'`, or `'indented'` + * 1:1: Unexpected value `🌍` for `options`, expected ``'`'``, `'~'`, or `'consistent'` */ -const remarkLintCodeBlockStyle = lintRule( +const remarkLintFencedCodeMarker = lintRule$1( { - origin: 'remark-lint:code-block-style', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-code-block-style#readme' + origin: 'remark-lint:fenced-code-marker', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-marker#readme' }, - (tree, file, option = 'consistent') => { + function (tree, file, options) { const value = String(file); - if ( - option !== 'consistent' && - option !== 'fenced' && - option !== 'indented' - ) { + let cause; + let expected; + if (options === null || options === undefined || options === 'consistent') ; else if (options === '`' || options === '~') { + expected = options; + } else { file.fail( - 'Incorrect code block style `' + - option + - "`: use either `'consistent'`, `'fenced'`, or `'indented'`" + 'Unexpected value `' + + options + + "` for `options`, expected ``'`'``, `'~'`, or `'consistent'`" ); } - visit$i(tree, 'code', (node) => { - if (generated(node)) { - return - } - const initial = pointStart(node).offset; - const final = pointEnd(node).offset; - const current = - node.lang || /^\s*([~`])\1{2,}/.test(value.slice(initial, final)) - ? 'fenced' - : 'indented'; - if (option === 'consistent') { - option = current; - } else if (option !== current) { - file.message('Code blocks should be ' + option, node); - } - }); - } -); -var remarkLintCodeBlockStyle$1 = remarkLintCodeBlockStyle; - -const convert$h = - ( - function (test) { - if (test === undefined || test === null) { - return ok$h - } - if (typeof test === 'string') { - return typeFactory$h(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$h(test) : propsFactory$h(test) - } - if (typeof test === 'function') { - return castFactory$h(test) + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$h(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$h(tests[index]); - } - return castFactory$h(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$h(check) { - return castFactory$h(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$h(check) { - return castFactory$h(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$h(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$h() { - return true -} - -function color$i(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$h = true; -const EXIT$h = false; -const SKIP$h = 'skip'; -const visitParents$h = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$h(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$i(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$h(visitor(node, parents)); - if (result[0] === EXIT$h) { - return result - } + if (node.type !== 'code') return + const start = pointStart(node); + if (start && typeof start.offset === 'number') { + const actual = value + .slice(start.offset, start.offset + 4) + .replace(/^\s+/, '') + .charAt(0); + if (actual !== '`' && actual !== '~') return + if (expected) { + if (actual !== expected) { + file.message( + 'Unexpected fenced code marker ' + + (actual === '~' ? '`~`' : '`` ` ``') + + ', expected ' + + (expected === '~' ? '`~`' : '`` ` ``'), + {ancestors: [...parents, node], cause, place: node.position} + ); } - if (node.children && result[0] !== SKIP$h) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$h) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; + } else { + expected = actual; + cause = new VFileMessage( + 'Fenced code marker style ' + + (actual === '~' ? "`'~'`" : "``'`'``") + + " first defined for `'consistent'` here", + { + ancestors: [...parents, node], + place: node.position, + ruleId: 'fenced-code-marker', + source: 'remark-lint' } - } - return result + ); } } - } - ); -function toResult$h(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$h, value] + }); } - return [value] -} - -const visit$h = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$h(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintFencedCodeMarker$1 = remarkLintFencedCodeMarker; /** + * remark-lint rule to warn for unexpected file extensions. + * + * ## What is this? + * + * This package checks the file extension. + * * ## When should I use this? * - * You can use this package to check that the labels used in definitions - * do not use meaningless white space. + * You can use this package to check that file extensions are consistent. * * ## API * - * There are no options. + * ### `unified().use(remarkLintFileExtension[, options])` * - * ## Recommendation + * Warn for unexpected extensions. * - * Definitions and references are matched together by collapsing white space. - * Using more white space in labels might incorrectly indicate that they are of - * importance. - * Due to this, it’s recommended to use one space (or a line ending if needed) - * and turn this rule on. + * ###### Parameters * - * @module definition-spacing - * @summary - * remark-lint rule to warn when consecutive whitespace is used in - * a definition label. - * @author Titus Wormer - * @copyright 2015 Titus Wormer - * @license MIT - * @example - * {"name": "ok.md"} + * * `options` ([`Extensions`][api-extensions] or [`Options`][api-options], + * optional) + * — configuration * - * [example domain]: http://example.com "Example Domain" + * ###### Returns * - * @example - * {"name": "not-ok.md", "label": "input"} + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * [example····domain]: http://example.com "Example Domain" + * ### `Extensions` * - * @example - * {"name": "not-ok.md", "label": "output"} + * File extension(s) (TypeScript type). * - * 1:1-1:57: Do not use consecutive whitespace in definition labels - */ -const label = /^\s*\[((?:\\[\s\S]|[^[\]])+)]/; -const remarkLintDefinitionSpacing = lintRule( - { - origin: 'remark-lint:definition-spacing', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-definition-spacing#readme' - }, - (tree, file) => { - const value = String(file); - visit$h(tree, (node) => { - if (node.type === 'definition' || node.type === 'footnoteDefinition') { - const start = pointStart(node).offset; - const end = pointEnd(node).offset; - if (typeof start === 'number' && typeof end === 'number') { - const match = value.slice(start, end).match(label); - if (match && /[ \t\n]{2,}/.test(match[1])) { - file.message( - 'Do not use consecutive whitespace in definition labels', - node - ); - } - } - } - }); - } -); -var remarkLintDefinitionSpacing$1 = remarkLintDefinitionSpacing; - -const convert$g = - ( - function (test) { - if (test === undefined || test === null) { - return ok$g - } - if (typeof test === 'string') { - return typeFactory$g(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$g(test) : propsFactory$g(test) - } - if (typeof test === 'function') { - return castFactory$g(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$g(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$g(tests[index]); - } - return castFactory$g(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$g(check) { - return castFactory$g(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$g(check) { - return castFactory$g(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$g(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$g() { - return true -} - -function color$h(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$g = true; -const EXIT$g = false; -const SKIP$g = 'skip'; -const visitParents$g = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$g(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$h(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$g(visitor(node, parents)); - if (result[0] === EXIT$g) { - return result - } - } - if (node.children && result[0] !== SKIP$g) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$g) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$g(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$g, value] - } - return [value] -} - -const visit$g = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$g(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); - -/** - * ## When should I use this? + * ###### Type + * + * ```ts + * type Extensions = Array | string + * ``` * - * You can use this package to check that language flags of fenced code - * are used and consistent. + * ### `Options` * - * ## API + * Configuration (TypeScript type). * - * The following options (default: `undefined`) are accepted: + * ###### Fields * - * * `Array` - * — as if passing `{flags: options}` - * * `Object` with the following fields: - * * `allowEmpty` (`boolean`, default: `false`) - * — allow language flags to be omitted - * * `flags` (`Array` default: `[]`) - * — specific flags to allow (other flags will result in a warning) + * * `allowExtensionless` (`boolean`, default: `true`) + * — allow no file extension such as `AUTHORS` or `LICENSE` + * * `extensions` ([`Extensions`][api-extensions], default: `['mdx', 'md']`) + * — allowed file extension(s) * * ## Recommendation * - * While omitting the language flag is perfectly fine to signal that the code is - * plain text, it *could* point to a mistake. - * It’s recommended to instead use a certain flag for plain text (such as `txt`) - * and to turn this rule on. + * Use `md` as it’s the most common. + * Also use `md` when your markdown contains common syntax extensions (such as + * GFM, frontmatter, or math). + * Do not use `md` for MDX: use `mdx` instead. + * + * [api-extensions]: #extensions + * [api-options]: #options + * [api-remark-lint-file-extension]: #unifieduseremarklintfileextension-options + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * - * @module fenced-code-flag - * @summary - * remark-lint rule to check that language flags of fenced code are used. + * @module file-extension * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT * * @example - * {"name": "ok.md"} - * - * ```alpha - * bravo() - * ``` - * - * @example - * {"name": "not-ok.md", "label": "input"} - * - * ``` - * alpha() - * ``` - * - * @example - * {"name": "not-ok.md", "label": "output"} - * - * 1:1-3:4: Missing code language flag + * {"name": "readme.md"} * * @example - * {"name": "ok.md", "config": {"allowEmpty": true}} - * - * ``` - * alpha() - * ``` + * {"name": "readme.mdx"} * * @example - * {"name": "not-ok.md", "config": {"allowEmpty": false}, "label": "input"} - * - * ``` - * alpha() - * ``` + * {"name": "readme"} * * @example - * {"name": "not-ok.md", "config": {"allowEmpty": false}, "label": "output"} + * {"config": {"allowExtensionless": false}, "label": "output", "name": "readme", "positionless": true} * - * 1:1-3:4: Missing code language flag + * 1:1: Unexpected missing file extension, expected `mdx` or `md` * * @example - * {"name": "ok.md", "config": ["alpha"]} + * {"label": "output", "name": "readme.mkd", "positionless": true} * - * ```alpha - * bravo() - * ``` + * 1:1: Unexpected file extension `mkd`, expected `mdx` or `md` * * @example - * {"name": "ok.md", "config": {"flags":["alpha"]}} - * - * ```alpha - * bravo() - * ``` + * {"config": "mkd", "name": "readme.mkd"} * * @example - * {"name": "not-ok.md", "config": ["charlie"], "label": "input"} - * - * ```alpha - * bravo() - * ``` + * {"config": ["markdown", "md", "mdown", "mdwn", "mdx", "mkd", "mkdn", "mkdown", "ron"], "label": "input", "name": "readme.css", "positionless": true} * * @example - * {"name": "not-ok.md", "config": ["charlie"], "label": "output"} + * {"config": ["markdown", "md", "mdown", "mdwn", "mdx", "mkd", "mkdn", "mkdown", "ron"], "label": "output", "name": "readme.css"} * - * 1:1-3:4: Incorrect code language flag + * 1:1: Unexpected file extension `css`, expected `markdown`, `md`, `mdown`, … */ -const fence = /^ {0,3}([~`])\1{2,}/; -const remarkLintFencedCodeFlag = lintRule( +const defaultExtensions = ['mdx', 'md']; +const listFormat = new Intl.ListFormat('en', {type: 'disjunction'}); +const listFormatUnit = new Intl.ListFormat('en', {type: 'unit'}); +const remarkLintFileExtension = lintRule$1( { - origin: 'remark-lint:fenced-code-flag', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-flag#readme' + origin: 'remark-lint:file-extension', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-file-extension#readme' }, - (tree, file, option) => { - const value = String(file); - let allowEmpty = false; - let allowed = []; - if (typeof option === 'object') { - if (Array.isArray(option)) { - allowed = option; - } else { - allowEmpty = Boolean(option.allowEmpty); - if (option.flags) { - allowed = option.flags; - } - } + function (_, file, options) { + let expected = defaultExtensions; + let allowExtensionless = true; + let extensionsValue; + if (Array.isArray(options)) { + extensionsValue = (options); + } else if (typeof options === 'string') { + extensionsValue = options; + } else if (options) { + const settings = (options); + extensionsValue = settings.extensions; + if (settings.allowExtensionless === false) { + allowExtensionless = false; + } + } + if (Array.isArray(extensionsValue)) { + expected = (extensionsValue); + } else if (typeof extensionsValue === 'string') { + expected = [extensionsValue]; + } + const extname = file.extname; + const actual = extname ? extname.slice(1) : undefined; + const expectedDisplay = + expected.length > 3 + ? listFormatUnit.format([...quotation(expected.slice(0, 3), '`'), '…']) + : listFormat.format(quotation(expected, '`')); + if (actual ? !expected.includes(actual) : !allowExtensionless) { + file.message( + (actual + ? 'Unexpected file extension `' + actual + '`' + : 'Unexpected missing file extension') + + ', expected ' + + expectedDisplay + ); } - visit$g(tree, 'code', (node) => { - if (!generated(node)) { - if (node.lang) { - if (allowed.length > 0 && !allowed.includes(node.lang)) { - file.message('Incorrect code language flag', node); - } - } else { - const slice = value.slice( - pointStart(node).offset, - pointEnd(node).offset - ); - if (!allowEmpty && fence.test(slice)) { - file.message('Missing code language flag', node); - } - } - } - }); } ); -var remarkLintFencedCodeFlag$1 = remarkLintFencedCodeFlag; - -const convert$f = - ( - function (test) { - if (test === undefined || test === null) { - return ok$f - } - if (typeof test === 'string') { - return typeFactory$f(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$f(test) : propsFactory$f(test) - } - if (typeof test === 'function') { - return castFactory$f(test) - } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory$f(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$f(tests[index]); - } - return castFactory$f(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$f(check) { - return castFactory$f(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$f(check) { - return castFactory$f(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$f(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$f() { - return true -} - -function color$g(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$f = true; -const EXIT$f = false; -const SKIP$f = 'skip'; -const visitParents$f = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$f(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$g(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$f(visitor(node, parents)); - if (result[0] === EXIT$f) { - return result - } - } - if (node.children && result[0] !== SKIP$f) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$f) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } - } - } - ); -function toResult$f(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$f, value] - } - return [value] -} - -const visit$f = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$f(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +var remarkLintFileExtension$1 = remarkLintFileExtension; /** + * remark-lint rule to warn when definitions are used *in* the + * document instead of at the end. + * + * ## What is this? + * + * This package checks where definitions are placed. + * * ## When should I use this? * - * You can use this package to check that fenced code markers are consistent. + * You can use this package to check that definitions are consistently at the + * end of the document. * * ## API * - * The following options (default: `'consistent'`) are accepted: + * ### `unified().use(remarkLintFinalDefinition)` * - * * ``'`'`` - * — prefer grave accents - * * `'~'` - * — prefer tildes - * * `'consistent'` - * — detect the first used style and warn when further fenced code differs + * Warn when definitions are used *in* the document instead of at the end. * - * ## Recommendation + * ###### Parameters * - * Tildes are extremely uncommon. - * Due to this, it’s recommended to configure this rule with ``'`'``. + * There are no options. * - * ## Fix + * ###### Returns * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats fenced code with grave accents by default. - * Pass - * [`fence: '~'`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#optionsfence) - * to always use tildes. + * Transform ([`Transformer` from `unified`][github-unified-transformer]). * - * @module fenced-code-marker - * @summary - * remark-lint rule to warn when fenced code markers are inconsistent. + * ## Recommendation + * + * There are different strategies for placing definitions. + * The simplest is perhaps to place them all at the bottem of documents. + * If you prefer that, turn on this rule. + * + * [api-remark-lint-final-definition]: #unifieduseremarklintfinaldefinition + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer + * + * @module final-definition * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md"} * - * Indented code blocks are not affected by this rule: + * Mercury. * - * bravo() + * [venus]: http://example.com * * @example - * {"name": "ok.md", "config": "`"} + * {"name": "ok.md"} * - * ```alpha - * bravo() - * ``` + * [mercury]: http://example.com/mercury/ + * [venus]: http://example.com/venus/ * - * ``` - * charlie() - * ``` + * @example + * {"name": "ok-html-comments.md"} + * + * Mercury. + * + * [venus]: http://example.com/venus/ + * + * + * + * [earth]: http://example.com/earth/ * * @example - * {"name": "ok.md", "config": "~"} + * {"name": "ok-mdx-comments.mdx", "mdx": true} * - * ~~~alpha - * bravo() - * ~~~ + * Mercury. * - * ~~~ - * charlie() - * ~~~ + * [venus]: http://example.com/venus/ + * + * {/* Comments in expressions in MDX are ignored. *␀/} + * + * [earth]: http://example.com/earth/ * * @example - * {"name": "not-ok-consistent-tick.md", "label": "input"} + * {"label": "input", "name": "not-ok.md"} * - * ```alpha - * bravo() - * ``` + * Mercury. * - * ~~~ - * charlie() - * ~~~ + * [venus]: https://example.com/venus/ * + * Earth. * @example - * {"name": "not-ok-consistent-tick.md", "label": "output"} + * {"label": "output", "name": "not-ok.md"} * - * 5:1-7:4: Fenced code should use `` ` `` as a marker + * 3:1-3:36: Unexpected definition before last content, expected definitions after line `5` * * @example - * {"name": "not-ok-consistent-tilde.md", "label": "input"} + * {"gfm": true, "label": "input", "name": "gfm-nok.md"} * - * ~~~alpha - * bravo() - * ~~~ + * Mercury. * - * ``` - * charlie() - * ``` + * [^venus]: + * **Venus** is the second planet from + * the Sun. * + * Earth. * @example - * {"name": "not-ok-consistent-tilde.md", "label": "output"} + * {"gfm": true, "label": "output", "name": "gfm-nok.md"} * - * 5:1-7:4: Fenced code should use `~` as a marker + * 3:1-5:13: Unexpected footnote definition before last content, expected definitions after line `7` * * @example - * {"name": "not-ok-incorrect.md", "config": "💩", "label": "output", "positionless": true} + * {"gfm": true, "name": "gfm-ok.md"} * - * 1:1: Incorrect fenced code marker `💩`: use either `'consistent'`, `` '`' ``, or `'~'` - */ -const remarkLintFencedCodeMarker = lintRule( + * Mercury. + * + * Earth. + * + * [^venus]: + * **Venus** is the second planet from + * the Sun. + */ +const remarkLintFinalDefinition = lintRule$1( { - origin: 'remark-lint:fenced-code-marker', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-marker#readme' + origin: 'remark-lint:final-definition', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-final-definition#readme' }, - (tree, file, option = 'consistent') => { - const contents = String(file); - if (option !== 'consistent' && option !== '~' && option !== '`') { - file.fail( - 'Incorrect fenced code marker `' + - option + - "`: use either `'consistent'`, `` '`' ``, or `'~'`" - ); - } - visit$f(tree, 'code', (node) => { - const start = pointStart(node).offset; - if (typeof start === 'number') { - const marker = contents - .slice(start, start + 4) - .replace(/^\s+/, '') - .charAt(0); - if (marker === '~' || marker === '`') { - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message( - 'Fenced code should use `' + - (option === '~' ? option : '` ` `') + - '` as a marker', - node - ); - } - } + function (tree, file) { + const definitionStacks = []; + let contentAncestors; + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP } + if (node.type === 'definition' || node.type === 'footnoteDefinition') { + definitionStacks.push([...parents, node]); + return SKIP + } + if ( + node.type === 'root' || + (node.type === 'html' && /^[\t ]* + * @example + * {"config": "🌍", "label": "output", "name": "not-ok.md", "positionless": true} * - * [example-2]: http://example.com/two/ + * 1:1: Unexpected value `🌍` for `options`, expected `'atx'`, `'atx-closed'`, `'setext'`, or `'consistent'` */ -const remarkLintFinalDefinition = lintRule( +const remarkLintHeadingStyle = lintRule$1( { - origin: 'remark-lint:final-definition', - url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-final-definition#readme' + origin: 'remark-lint:heading-style', + url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-heading-style#readme' }, - (tree, file) => { - let last = 0; - visit$e( - tree, - (node) => { - if ( - node.type === 'root' || - generated(node) || - (node.type === 'html' && /^\s* + * > | Mercury| + * > | - | * - * | | Alpha | Bravo| - * | ------ | ----- | ---: | - * | Charlie| | Echo| + * * | Venus| + * | - | * + * > * > | Earth| + * > > | - | * @example - * {"name": "empty.md", "label": "output", "config": "padded", "gfm": true} + * {"config": "padded", "gfm": true, "label": "output", "name": "containers.md"} * - * 3:25: Cell should be padded - * 5:10: Cell should be padded - * 5:25: Cell should be padded + * 1:12: Unexpected `0` spaces between cell content and edge, expected `1` space, add `1` space + * 4:10: Unexpected `0` spaces between cell content and edge, expected `1` space, add `1` space + * 7:14: Unexpected `0` spaces between cell content and edge, expected `1` space, add `1` space * * @example - * {"name": "missing-body.md", "config": "padded", "gfm": true} + * {"config": "padded", "gfm": true, "label": "input", "name": "windows.md"} * - * + * | Mercury|␍␊| --- |␍␊| None | + * @example + * {"config": "padded", "gfm": true, "label": "output", "name": "windows.md"} + * + * 1:10: Unexpected `0` spaces between cell content and edge, expected `1` space, add `1` space + * + * @example + * {"config": "🌍", "gfm": true, "label": "output", "name": "not-ok.md", "positionless": true} * - * | Alpha | Bravo | Charlie | - * | ----- | ------- | ------- | - * | Delta | - * | Echo | Foxtrot | + * 1:1: Unexpected value `🌍` for `options`, expected `'compact'`, `'padded'`, or `'consistent'` */ -const remarkLintTableCellPadding = lintRule( +const remarkLintTableCellPadding = lintRule$1( { origin: 'remark-lint:table-cell-padding', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-cell-padding#readme' }, - (tree, file, option = 'consistent') => { - if ( - option !== 'padded' && - option !== 'compact' && - option !== 'consistent' - ) { + function (tree, file, options) { + const value = String(file); + let expected; + let cause; + if (options === null || options === undefined || options === 'consistent') ; else if (options === 'compact' || options === 'padded') { + expected = options; + } else { file.fail( - 'Incorrect table cell padding style `' + - option + - "`, expected `'padded'`, `'compact'`, or `'consistent'`" + 'Unexpected value `' + + options + + "` for `options`, expected `'compact'`, `'padded'`, or `'consistent'`" ); } - visit$2(tree, 'table', (node) => { - const rows = node.children; - const align = node.align || []; + visitParents(tree, function (table, parents) { + if (phrasing(table)) { + return SKIP + } + if (table.type !== 'table') return + const entries = inferTable([...parents, table]); const sizes = []; - const entries = []; - let index = -1; - while (++index < align.length) { - const alignment = align[index]; - sizes[index] = alignment === 'center' ? 3 : alignment ? 2 : 1; + for (const entry of entries) { + if ( + entry.size && + (sizes[entry.column] === undefined || + entry.size.middle > sizes[entry.column]) + ) { + sizes[entry.column] = entry.size.middle; + } } - index = -1; - while (++index < rows.length) { - const row = rows[index]; - let column = -1; - while (++column < row.children.length) { - const cell = row.children[column]; - const cellStart = pointStart(cell).offset; - const cellEnd = pointEnd(cell).offset; - const contentStart = pointStart(cell.children[0]).offset; - const contentEnd = pointEnd( - cell.children[cell.children.length - 1] - ).offset; + if (!expected) { + for (const info of entries) { if ( - typeof cellStart !== 'number' || - typeof cellEnd !== 'number' || - typeof contentStart !== 'number' || - typeof contentEnd !== 'number' + info.size && + info.size.middle && + info.size.middle === sizes[info.column] ) { - continue + const node = info.ancestors.at(-1); + expected = info.size.left ? 'padded' : 'compact'; + cause = new VFileMessage( + "Cell padding style `'" + + expected + + "'` first defined for `'consistent'` here", + { + ancestors: info.ancestors, + place: node.position, + ruleId: 'table-cell-padding', + source: 'remark-lint' + } + ); } - entries.push({ - node: cell, - start: contentStart - cellStart - 1, - end: - cellEnd - - contentEnd - - (column === row.children.length - 1 ? 1 : 0), - column - }); - sizes[column] = Math.max( - sizes[column] || 0, - contentEnd - contentStart - ); } } - const style = - option === 'consistent' - ? entries[0] && (!entries[0].start || !entries[0].end) - ? 0 - : 1 - : option === 'padded' - ? 1 - : 0; - index = -1; - while (++index < entries.length) { - checkSide('start', entries[index], style, sizes); - checkSide('end', entries[index], style, sizes); - } - return SKIP$2 + if (!expected) return + for (const info of entries) { + checkSide('left', info, sizes); + checkSide('right', info, sizes); + } + return SKIP }); - function checkSide(side, entry, style, sizes) { - const cell = entry.node; - const column = entry.column; - const spacing = entry[side]; - if (spacing === undefined || spacing === style) { + function checkSide(side, info, sizes) { + if (!info.size) { return } - let reason = 'Cell should be '; - if (style === 0) { - if (size(cell) < sizes[column]) { - return - } - reason += 'compact'; - } else { - reason += 'padded'; - if (spacing > style) { - if (size(cell) < sizes[column]) { - return + const actual = info.size[side]; + if (actual === undefined) { + return + } + const alignSpaces = sizes[info.column] - info.size.middle; + const min = expected === 'compact' ? 0 : 1; + let max = min; + if (info.align === 'center') { + max += Math.ceil(alignSpaces / 2); + } else if (info.align === 'right' ? side === 'left' : side === 'right') { + max += alignSpaces; + } + if (info.size.middle === 0) { + if (side === 'right') return + max = Math.max(max, sizes[info.column] + 2 * min); + } + if (actual < min || actual > max) { + const differenceMin = min - actual; + const differenceMinAbsolute = Math.abs(differenceMin); + const differenceMax = max - actual; + const differenceMaxAbsolute = Math.abs(differenceMax); + file.message( + 'Unexpected `' + + actual + + '` ' + + pluralize('space', actual) + + ' between cell ' + + (side === 'left' ? 'edge' : 'content') + + ' and ' + + (side === 'left' ? 'content' : 'edge') + + ', expected ' + + (min === max ? '' : 'between `' + min + '` (unaligned) and ') + + '`' + + max + + '` ' + + (min === max ? '' : '(aligned) ') + + pluralize('space', max) + + ', ' + + (differenceMin < 0 ? 'remove' : 'add') + + (differenceMin === differenceMax + ? '' + : ' between `' + differenceMaxAbsolute + '` and') + + ' `' + + differenceMinAbsolute + + '` ' + + pluralize('space', differenceMinAbsolute), + { + ancestors: info.ancestors, + cause, + place: side === 'left' ? info.size.leftPoint : info.size.rightPoint } - reason += ' with 1 space, not ' + spacing; - } + ); } - file.message( - reason, - side === 'start' - ? pointStart(cell.children[0]) - : pointEnd(cell.children[cell.children.length - 1]) - ); } - } -); -var remarkLintTableCellPadding$1 = remarkLintTableCellPadding; -function size(node) { - const head = pointStart(node.children[0]).offset; - const tail = pointEnd(node.children[node.children.length - 1]).offset; - return typeof head === 'number' && typeof tail === 'number' ? tail - head : 0 -} - -const convert$1 = - ( - function (test) { - if (test === undefined || test === null) { - return ok$1 + function inferTable(ancestors) { + const node = ancestors.at(-1); + ok$1(node.type === 'table'); + const align = node.align || []; + const result = []; + let rowIndex = -1; + while (++rowIndex < node.children.length) { + const row = node.children[rowIndex]; + let column = -1; + while (++column < row.children.length) { + const node = row.children[column]; + result.push({ + align: align[column], + ancestors: [...ancestors, row, node], + column, + size: inferSize( + pointStart(node), + pointEnd(node), + column === row.children.length - 1 + ) + }); + } + if (rowIndex === 0) { + const alignRow = inferAlignRow(ancestors, align); + if (alignRow) result.push(...alignRow); + } } - if (typeof test === 'string') { - return typeFactory$1(test) + return result + } + function inferAlignRow(ancestors, align) { + const node = ancestors.at(-1); + ok$1(node.type === 'table'); + const headEnd = pointEnd(node.children[0]); + if (!headEnd || typeof headEnd.offset !== 'number') return + let index = headEnd.offset; + if (value.charCodeAt(index) === 13 ) index++; + if (value.charCodeAt(index) !== 10 ) return + index++; + const result = []; + const line = headEnd.line + 1; + let code = value.charCodeAt(index); + while ( + code === 9 || + code === 32 || + code === 62 + ) { + index++; + code = value.charCodeAt(index); } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory$1(test) : propsFactory$1(test) + if ( + code !== 45 && + code !== 58 && + code !== 124 + ) { + return } - if (typeof test === 'function') { - return castFactory$1(test) + let lineEndOffset = value.indexOf('\n', index); + if (lineEndOffset === -1) lineEndOffset = value.length; + if (value.charCodeAt(lineEndOffset - 1) === 13 ) lineEndOffset--; + let column = 0; + let cellStart = index; + let cellEnd = value.indexOf('|', index + (code === 124 ? 1 : 0)); + if (cellEnd === -1 || cellEnd > lineEndOffset) { + cellEnd = lineEndOffset; + } + while (cellStart !== cellEnd) { + let nextCellEnd = value.indexOf('|', cellEnd + 1); + if (nextCellEnd === -1 || nextCellEnd > lineEndOffset) { + nextCellEnd = lineEndOffset; + } + if (nextCellEnd === lineEndOffset) { + let maybeEnd = lineEndOffset; + let code = value.charCodeAt(maybeEnd - 1); + while (code === 9 || code === 32 ) { + maybeEnd--; + code = value.charCodeAt(maybeEnd - 1); + } + if (cellEnd + 1 === maybeEnd) { + cellEnd = lineEndOffset; + } + } + result.push({ + align: align[column], + ancestors, + column, + size: inferSize( + { + line, + column: cellStart - index + 1, + offset: cellStart + }, + {line, column: cellEnd - index + 1, offset: cellEnd}, + cellEnd === lineEndOffset + ) + }); + cellStart = cellEnd; + cellEnd = nextCellEnd; + column++; } - throw new Error('Expected function, string, or object as test') + return result } - ); -function anyFactory$1(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert$1(tests[index]); - } - return castFactory$1(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true - } - return false - } -} -function propsFactory$1(check) { - return castFactory$1(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory$1(check) { - return castFactory$1(type) - function type(node) { - return node && node.type === check - } -} -function castFactory$1(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok$1() { - return true -} - -function color$2(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE$1 = true; -const EXIT$1 = false; -const SKIP$1 = 'skip'; -const visitParents$1 = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert$1(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$2(node.type + (name ? '<' + name + '>' : '')) + ')' - }); + function inferSize(start, end, tailCell) { + if ( + end && + start && + typeof end.offset === 'number' && + typeof start.offset === 'number' + ) { + let leftIndex = start.offset; + let left; + let right; + if (value.charCodeAt(leftIndex) === 124 ) { + left = 0; + leftIndex++; + while (value.charCodeAt(leftIndex) === 32) { + left++; + leftIndex++; + } } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult$1(visitor(node, parents)); - if (result[0] === EXIT$1) { - return result - } + let rightIndex = end.offset; + if (tailCell) { + while (value.charCodeAt(rightIndex - 1) === 32) { + rightIndex--; } - if (node.children && result[0] !== SKIP$1) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT$1) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } + if ( + rightIndex > leftIndex && + value.charCodeAt(rightIndex - 1) === 124 + ) { + rightIndex--; + } + else { + rightIndex = end.offset; + } + } + const rightEdgeIndex = rightIndex; + if (value.charCodeAt(rightIndex) === 124 ) { + right = 0; + while ( + rightIndex - 1 > leftIndex && + value.charCodeAt(rightIndex - 1) === 32 + ) { + right++; + rightIndex--; + } + } + return { + left, + leftPoint: { + line: start.line, + column: start.column + (leftIndex - start.offset), + offset: leftIndex + }, + middle: rightIndex - leftIndex, + right, + rightPoint: { + line: end.line, + column: end.column - (end.offset - rightEdgeIndex), + offset: rightEdgeIndex } - return result } } } - ); -function toResult$1(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE$1, value] } - return [value] -} - -const visit$1 = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents$1(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) - } - } - ); +); +var remarkLintTableCellPadding$1 = remarkLintTableCellPadding; /** + * remark-lint rule to warn when GFM table rows have no initial or + * final cell delimiter. + * + * ## What is this? + * + * This package checks that table rows have initial and final delimiters. + * Tables are a GFM feature enabled with [`remark-gfm`][github-remark-gfm]. + * * ## When should I use this? * - * You can use this package to check that tables have initial and final - * delimiters. - * Tables are a GFM feature enabled with - * [`remark-gfm`](https://github.com/remarkjs/remark-gfm). + * You can use this package to check that tables are consistent. * * ## API * + * ### `unified().use(remarkLintTablePipes)` + * + * Warn when GFM table rows have no initial or final cell delimiter. + * + * ###### Parameters + * * There are no options. * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * * ## Recommendation * - * While tables don’t require initial or final delimiters (pipes before the - * first and after the last cells in a row), it arguably does look weird. + * While tables don’t require initial or final delimiters (the pipes before the + * first and after the last cells in a row), + * it arguably does look weird without. * * ## Fix * - * [`remark-gfm`](https://github.com/remarkjs/remark-gfm) - * formats all tables with initial and final delimiters. + * [`remark-stringify`][github-remark-stringify] with + * [`remark-gfm`][github-remark-gfm] formats all tables with initial and final + * delimiters. + * + * [api-remark-lint-table-pipes]: #unifieduseremarklinttablepipes + * [github-remark-gfm]: https://github.com/remarkjs/remark-gfm + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * * @module table-pipes - * @summary - * remark-lint rule to warn when tables are missing initial and final - * delimiters. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT + * * @example * {"name": "ok.md", "gfm": true} * - * | A | B | - * | ----- | ----- | - * | Alpha | Bravo | + * Small table: + * + * | Planet | Mean anomaly (°) | + * | :- | -: | + * | Mercury | 174 796 | * * @example * {"name": "not-ok.md", "label": "input", "gfm": true} * - * A | B - * ----- | ----- - * Alpha | Bravo - * + * Planet | Mean anomaly (°) + * :- | -: + * Mercury | 174 796 * @example * {"name": "not-ok.md", "label": "output", "gfm": true} * - * 1:1: Missing initial pipe in table fence - * 1:10: Missing final pipe in table fence - * 3:1: Missing initial pipe in table fence - * 3:14: Missing final pipe in table fence + * 1:1: Unexpected missing closing pipe in row, expected `|` + * 1:26: Unexpected missing opening pipe in row, expected `|` + * 2:1: Unexpected missing closing pipe in row, expected `|` + * 2:8: Unexpected missing opening pipe in row, expected `|` + * 3:1: Unexpected missing closing pipe in row, expected `|` + * 3:18: Unexpected missing opening pipe in row, expected `|` + * + * @example + * {"gfm": true, "label": "input", "name": "missing-cells.md"} + * + * Planet | Symbol | Satellites + * :- | - | - + * Mercury + * Venus | ♀ + * Earth | ♁ | 1 + * Mars | ♂ | 2 | 19 412 + * @example + * {"gfm": true, "label": "output", "name": "missing-cells.md"} + * + * 1:1: Unexpected missing closing pipe in row, expected `|` + * 1:29: Unexpected missing opening pipe in row, expected `|` + * 2:1: Unexpected missing closing pipe in row, expected `|` + * 2:11: Unexpected missing opening pipe in row, expected `|` + * 3:1: Unexpected missing closing pipe in row, expected `|` + * 3:8: Unexpected missing opening pipe in row, expected `|` + * 4:1: Unexpected missing closing pipe in row, expected `|` + * 4:10: Unexpected missing opening pipe in row, expected `|` + * 5:1: Unexpected missing closing pipe in row, expected `|` + * 5:14: Unexpected missing opening pipe in row, expected `|` + * 6:1: Unexpected missing closing pipe in row, expected `|` + * 6:22: Unexpected missing opening pipe in row, expected `|` + * + * @example + * {"gfm": true, "label": "input", "name": "trailing-spaces.md"} + * + * ␠␠Planet␠␠ + * ␠-:␠ + * + * ␠␠| Planet |␠␠ + * ␠| -: |␠ + * @example + * {"gfm": true, "label": "output", "name": "trailing-spaces.md"} + * + * 1:3: Unexpected missing closing pipe in row, expected `|` + * 1:11: Unexpected missing opening pipe in row, expected `|` + * 2:2: Unexpected missing closing pipe in row, expected `|` + * 2:5: Unexpected missing opening pipe in row, expected `|` + * + * @example + * {"gfm": true, "label": "input", "name": "windows.md"} + * + * Mercury␍␊:-␍␊None + * @example + * {"gfm": true, "label": "output", "name": "windows.md"} + * + * 1:1: Unexpected missing closing pipe in row, expected `|` + * 1:8: Unexpected missing opening pipe in row, expected `|` + * 2:1: Unexpected missing closing pipe in row, expected `|` + * 2:3: Unexpected missing opening pipe in row, expected `|` + * 3:1: Unexpected missing closing pipe in row, expected `|` + * 3:5: Unexpected missing opening pipe in row, expected `|` */ -const reasonStart = 'Missing initial pipe in table fence'; -const reasonEnd = 'Missing final pipe in table fence'; -const remarkLintTablePipes = lintRule( +const remarkLintTablePipes = lintRule$1( { origin: 'remark-lint:table-pipes', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-pipes#readme' }, - (tree, file) => { + function (tree, file) { const value = String(file); - visit$1(tree, 'table', (node) => { + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'table') return let index = -1; while (++index < node.children.length) { const row = node.children[index]; const start = pointStart(row); const end = pointEnd(row); - if ( - typeof start.offset === 'number' && - value.charCodeAt(start.offset) !== 124 - ) { - file.message(reasonStart, start); + if (start && typeof start.offset === 'number') { + checkStart(start.offset, start, [...parents, node, row]); } - if ( - typeof end.offset === 'number' && - value.charCodeAt(end.offset - 1) !== 124 - ) { - file.message(reasonEnd, end); + if (end && typeof end.offset === 'number') { + checkEnd(end.offset, end, [...parents, node, row]); + if (index === 0) { + let index = end.offset; + if (value.charCodeAt(index) === 13 ) index++; + if (value.charCodeAt(index) !== 10 ) continue + index++; + const lineStart = index; + let code = value.charCodeAt(index); + while ( + code === 9 || + code === 32 || + code === 62 + ) { + index++; + code = value.charCodeAt(index); + } + checkStart( + index, + { + line: end.line + 1, + column: index - lineStart + 1, + offset: index + }, + [...parents, node] + ); + index = value.indexOf('\n', index); + if (index === -1) index = value.length; + if (value.charCodeAt(index - 1) === 13 ) index--; + checkEnd( + index, + { + line: end.line + 1, + column: index - lineStart + 1, + offset: index + }, + [...parents, node] + ); + } } } + return SKIP }); - } -); -var remarkLintTablePipes$1 = remarkLintTablePipes; - -const convert = - ( - function (test) { - if (test === undefined || test === null) { - return ok - } - if (typeof test === 'string') { - return typeFactory(test) - } - if (typeof test === 'object') { - return Array.isArray(test) ? anyFactory(test) : propsFactory(test) - } - if (typeof test === 'function') { - return castFactory(test) + function checkStart(index, place, ancestors) { + let code = value.charCodeAt(index); + while (code === 9 || code === 32 ) { + code = value.charCodeAt(++index); + } + if (code !== 124 ) { + file.message('Unexpected missing closing pipe in row, expected `|`', { + ancestors, + place + }); } - throw new Error('Expected function, string, or object as test') - } - ); -function anyFactory(tests) { - const checks = []; - let index = -1; - while (++index < tests.length) { - checks[index] = convert(tests[index]); - } - return castFactory(any) - function any(...parameters) { - let index = -1; - while (++index < checks.length) { - if (checks[index].call(this, ...parameters)) return true } - return false - } -} -function propsFactory(check) { - return castFactory(all) - function all(node) { - let key; - for (key in check) { - if (node[key] !== check[key]) return false - } - return true - } -} -function typeFactory(check) { - return castFactory(type) - function type(node) { - return node && node.type === check - } -} -function castFactory(check) { - return assertion - function assertion(node, ...parameters) { - return Boolean( - node && - typeof node === 'object' && - 'type' in node && - Boolean(check.call(this, node, ...parameters)) - ) - } -} -function ok() { - return true -} - -function color$1(d) { - return '\u001B[33m' + d + '\u001B[39m' -} - -const CONTINUE = true; -const EXIT = false; -const SKIP = 'skip'; -const visitParents = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - const is = convert(test); - const step = reverse ? -1 : 1; - factory(tree, undefined, [])(); - function factory(node, index, parents) { - const value = node && typeof node === 'object' ? node : {}; - if (typeof value.type === 'string') { - const name = - typeof value.tagName === 'string' - ? value.tagName - : - typeof value.name === 'string' - ? value.name - : undefined; - Object.defineProperty(visit, 'name', { - value: - 'node (' + color$1(node.type + (name ? '<' + name + '>' : '')) + ')' - }); - } - return visit - function visit() { - let result = []; - let subresult; - let offset; - let grandparents; - if (!test || is(node, index, parents[parents.length - 1] || null)) { - result = toResult(visitor(node, parents)); - if (result[0] === EXIT) { - return result - } - } - if (node.children && result[0] !== SKIP) { - offset = (reverse ? node.children.length : -1) + step; - grandparents = parents.concat(node); - while (offset > -1 && offset < node.children.length) { - subresult = factory(node.children[offset], offset, grandparents)(); - if (subresult[0] === EXIT) { - return subresult - } - offset = - typeof subresult[1] === 'number' ? subresult[1] : offset + step; - } - } - return result - } + function checkEnd(index, place, ancestors) { + let code = value.charCodeAt(index - 1); + while (code === 9 || code === 32 ) { + index--; + code = value.charCodeAt(index - 1); } - } - ); -function toResult(value) { - if (Array.isArray(value)) { - return value - } - if (typeof value === 'number') { - return [CONTINUE, value] - } - return [value] -} - -const visit = - ( - function (tree, test, visitor, reverse) { - if (typeof test === 'function' && typeof visitor !== 'function') { - reverse = visitor; - visitor = test; - test = null; - } - visitParents(tree, test, overload, reverse); - function overload(node, parents) { - const parent = parents[parents.length - 1]; - return visitor( - node, - parent ? parent.children.indexOf(node) : null, - parent - ) + if (code !== 124 ) { + file.message('Unexpected missing opening pipe in row, expected `|`', { + ancestors, + place + }); } } - ); + } +); +var remarkLintTablePipes$1 = remarkLintTablePipes; /** + * remark-lint rule to warn when unordered list markers are inconsistent. + * + * ## What is this? + * + * This package checks unordered list markers. + * * ## When should I use this? * - * You can use this package to check that unordered list markers (bullets) - * are consistent. + * You can use this package to check unordered lists. * * ## API * - * The following options (default: `'consistent'`) are accepted: + * ### `unified().use(remarkLintUnorderedListMarkerStyle[, options])` + * + * Warn when unordered list markers are inconsistent. + * + * ###### Parameters + * + * * `options` ([`Options`][api-options], default: `'consistent'`) + * — preferred style or whether to detect the first style and warn for + * further differences + * + * ###### Returns + * + * Transform ([`Transformer` from `unified`][github-unified-transformer]). + * + * ### `Options` + * + * Configuration (TypeScript type). * - * * `'*'` - * — prefer asterisks - * * `'+'` - * — prefer plusses - * * `'-'` - * — prefer dashes - * * `'consistent'` - * — detect the first used style and warn when further markers differ + * ###### Type + * + * ```ts + * type Options = Style | 'consistent' + * ``` + * + * ### `Style` + * + * Style (TypeScript type). + * + * ###### Type + * + * ```ts + * type Style = '*' | '+' | '-' + * ``` * * ## Recommendation * @@ -26622,103 +23691,125 @@ const visit = * * ## Fix * - * [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify) - * formats ordered lists with asterisks by default. - * Pass - * [`bullet: '+'` or `bullet: '-'`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify#optionsbullet) - * to always use plusses or dashes. + * [`remark-stringify`][github-remark-stringify] formats unordered lists with + * asterisks by default. + * Pass `bullet: '+'` or `bullet: '-'` to use a different marker. + * + * [api-options]: #options + * [api-style]: #style + * [api-remark-lint-unordered-list-marker-style]: #unifieduseremarklintunorderedlistmarkerstyle-options + * [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify + * [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer * * @module unordered-list-marker-style - * @summary - * remark-lint rule to warn when unordered list markers are inconsistent. * @author Titus Wormer * @copyright 2015 Titus Wormer * @license MIT * @example * {"name": "ok.md"} * - * By default (`'consistent'`), if the file uses only one marker, - * that’s OK. + * * Mercury * - * * Foo - * * Bar - * * Baz + * 1. Venus * - * Ordered lists are not affected. - * - * 1. Foo - * 2. Bar - * 3. Baz + * * Earth * * @example * {"name": "ok.md", "config": "*"} * - * * Foo + * * Mercury * * @example * {"name": "ok.md", "config": "-"} * - * - Foo + * - Mercury * * @example * {"name": "ok.md", "config": "+"} * - * + Foo + * + Mercury * * @example * {"name": "not-ok.md", "label": "input"} * - * * Foo - * - Bar - * + Baz + * * Mercury + * + * - Venus * + * + Earth * @example * {"name": "not-ok.md", "label": "output"} * - * 2:1-2:6: Marker style should be `*` - * 3:1-3:6: Marker style should be `*` + * 3:1: Unexpected unordered list marker `-`, expected `*` + * 5:1: Unexpected unordered list marker `+`, expected `*` * * @example - * {"name": "not-ok.md", "label": "output", "config": "💩", "positionless": true} + * {"name": "not-ok.md", "label": "output", "config": "🌍", "positionless": true} * - * 1:1: Incorrect unordered list item marker style `💩`: use either `'-'`, `'*'`, or `'+'` + * 1:1: Unexpected value `🌍` for `options`, expected `'*'`, `'+'`, `'-'`, or `'consistent'` */ -const markers = new Set(['-', '*', '+']); -const remarkLintUnorderedListMarkerStyle = lintRule( +const remarkLintUnorderedListMarkerStyle = lintRule$1( { origin: 'remark-lint:unordered-list-marker-style', url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-unordered-list-marker-style#readme' }, - (tree, file, option = 'consistent') => { + function (tree, file, options) { const value = String(file); - if (option !== 'consistent' && !markers.has(option)) { + let expected; + let cause; + if (options === null || options === undefined || options === 'consistent') ; else if (options === '*' || options === '+' || options === '-') { + expected = options; + } else { file.fail( - 'Incorrect unordered list item marker style `' + - option + - "`: use either `'-'`, `'*'`, or `'+'`" + 'Unexpected value `' + + options + + "` for `options`, expected `'*'`, `'+'`, `'-'`, or `'consistent'`" ); } - visit(tree, 'list', (node) => { - if (node.ordered) return - let index = -1; - while (++index < node.children.length) { - const child = node.children[index]; - if (!generated(child)) { - const marker = ( - value - .slice( - pointStart(child).offset, - pointStart(child.children[0]).offset - ) - .replace(/\[[x ]?]\s*$/i, '') - .replace(/\s/g, '') + visitParents(tree, function (node, parents) { + if (phrasing(node)) { + return SKIP + } + if (node.type !== 'listItem') return + const parent = parents.at(-1); + if (!parent || parent.type !== 'list' || parent.ordered) return + const place = pointStart(node); + if (!place || typeof place.offset !== 'number') return + const code = value.charCodeAt(place.offset); + const actual = + code === 42 + ? '*' + : code === 43 + ? '+' + : code === 45 + ? '-' + : + undefined; + if (!actual) return + if (expected) { + if (actual !== expected) { + file.message( + 'Unexpected unordered list marker `' + + actual + + '`, expected `' + + expected + + '`', + {ancestors: [...parents, node], cause, place} ); - if (option === 'consistent') { - option = marker; - } else if (marker !== option) { - file.message('Marker style should be `' + option + '`', child); - } } + } else { + expected = actual; + cause = new VFileMessage( + 'Unordered list marker style `' + + expected + + "` first defined for `'consistent'` here", + { + ancestors: [...parents, node], + place, + ruleId: 'unordered-list-marker-style', + source: 'remark-lint' + } + ); } }); } @@ -26761,8 +23852,7 @@ const plugins = [ remarkLintFinalDefinition$1, [remarkLintFirstHeadingLevel$1, 1], [remarkLintHeadingStyle$1, "atx"], - [remarkLintListItemIndent$1, "space"], - remarkLintMaximumLineLength$1, + [remarkLintMaximumLineLength$1, 120], remarkLintNoConsecutiveBlankLines$1, remarkLintNoFileNameArticles$1, remarkLintNoFileNameConsecutiveDashes$1, @@ -26804,279 +23894,10 @@ const plugins = [ ]; const settings = { emphasis: "_", - listItemIndent: "one", tightDefinitions: true, }; const remarkPresetLintNode = { plugins, settings }; -class VFileMessage extends Error { - constructor(causeOrReason, optionsOrParentOrPlace, origin) { - super(); - if (typeof optionsOrParentOrPlace === 'string') { - origin = optionsOrParentOrPlace; - optionsOrParentOrPlace = undefined; - } - let reason = ''; - let options = {}; - let legacyCause = false; - if (optionsOrParentOrPlace) { - if ( - 'line' in optionsOrParentOrPlace && - 'column' in optionsOrParentOrPlace - ) { - options = {place: optionsOrParentOrPlace}; - } - else if ( - 'start' in optionsOrParentOrPlace && - 'end' in optionsOrParentOrPlace - ) { - options = {place: optionsOrParentOrPlace}; - } - else if ('type' in optionsOrParentOrPlace) { - options = { - ancestors: [optionsOrParentOrPlace], - place: optionsOrParentOrPlace.position - }; - } - else { - options = {...optionsOrParentOrPlace}; - } - } - if (typeof causeOrReason === 'string') { - reason = causeOrReason; - } - else if (!options.cause && causeOrReason) { - legacyCause = true; - reason = causeOrReason.message; - options.cause = causeOrReason; - } - if (!options.ruleId && !options.source && typeof origin === 'string') { - const index = origin.indexOf(':'); - if (index === -1) { - options.ruleId = origin; - } else { - options.source = origin.slice(0, index); - options.ruleId = origin.slice(index + 1); - } - } - if (!options.place && options.ancestors && options.ancestors) { - const parent = options.ancestors[options.ancestors.length - 1]; - if (parent) { - options.place = parent.position; - } - } - const start = - options.place && 'start' in options.place - ? options.place.start - : options.place; - this.ancestors = options.ancestors || undefined; - this.cause = options.cause || undefined; - this.column = start ? start.column : undefined; - this.fatal = undefined; - this.file; - this.message = reason; - this.line = start ? start.line : undefined; - this.name = stringifyPosition$2(options.place) || '1:1'; - this.place = options.place || undefined; - this.reason = this.message; - this.ruleId = options.ruleId || undefined; - this.source = options.source || undefined; - this.stack = - legacyCause && options.cause && typeof options.cause.stack === 'string' - ? options.cause.stack - : ''; - this.actual; - this.expected; - this.note; - this.url; - } -} -VFileMessage.prototype.file = ''; -VFileMessage.prototype.name = ''; -VFileMessage.prototype.reason = ''; -VFileMessage.prototype.message = ''; -VFileMessage.prototype.stack = ''; -VFileMessage.prototype.column = undefined; -VFileMessage.prototype.line = undefined; -VFileMessage.prototype.ancestors = undefined; -VFileMessage.prototype.cause = undefined; -VFileMessage.prototype.fatal = undefined; -VFileMessage.prototype.place = undefined; -VFileMessage.prototype.ruleId = undefined; -VFileMessage.prototype.source = undefined; - -function isUrl(fileUrlOrPath) { - return Boolean( - fileUrlOrPath !== null && - typeof fileUrlOrPath === 'object' && - 'href' in fileUrlOrPath && - fileUrlOrPath.href && - 'protocol' in fileUrlOrPath && - fileUrlOrPath.protocol && - fileUrlOrPath.auth === undefined - ) -} - -const order = ([ - 'history', - 'path', - 'basename', - 'stem', - 'extname', - 'dirname' -]); -class VFile { - constructor(value) { - let options; - if (!value) { - options = {}; - } else if (isUrl(value)) { - options = {path: value}; - } else if (typeof value === 'string' || isUint8Array$1(value)) { - options = {value}; - } else { - options = value; - } - this.cwd = process$1.cwd(); - this.data = {}; - this.history = []; - this.messages = []; - this.value; - this.map; - this.result; - this.stored; - let index = -1; - while (++index < order.length) { - const prop = order[index]; - if ( - prop in options && - options[prop] !== undefined && - options[prop] !== null - ) { - this[prop] = prop === 'history' ? [...options[prop]] : options[prop]; - } - } - let prop; - for (prop in options) { - if (!order.includes(prop)) { - this[prop] = options[prop]; - } - } - } - get basename() { - return typeof this.path === 'string' ? path$1.basename(this.path) : undefined - } - set basename(basename) { - assertNonEmpty(basename, 'basename'); - assertPart(basename, 'basename'); - this.path = path$1.join(this.dirname || '', basename); - } - get dirname() { - return typeof this.path === 'string' ? path$1.dirname(this.path) : undefined - } - set dirname(dirname) { - assertPath(this.basename, 'dirname'); - this.path = path$1.join(dirname || '', this.basename); - } - get extname() { - return typeof this.path === 'string' ? path$1.extname(this.path) : undefined - } - set extname(extname) { - assertPart(extname, 'extname'); - assertPath(this.dirname, 'extname'); - if (extname) { - if (extname.codePointAt(0) !== 46 ) { - throw new Error('`extname` must start with `.`') - } - if (extname.includes('.', 1)) { - throw new Error('`extname` cannot contain multiple dots') - } - } - this.path = path$1.join(this.dirname, this.stem + (extname || '')); - } - get path() { - return this.history[this.history.length - 1] - } - set path(path) { - if (isUrl(path)) { - path = fileURLToPath(path); - } - assertNonEmpty(path, 'path'); - if (this.path !== path) { - this.history.push(path); - } - } - get stem() { - return typeof this.path === 'string' - ? path$1.basename(this.path, this.extname) - : undefined - } - set stem(stem) { - assertNonEmpty(stem, 'stem'); - assertPart(stem, 'stem'); - this.path = path$1.join(this.dirname || '', stem + (this.extname || '')); - } - fail(causeOrReason, optionsOrParentOrPlace, origin) { - const message = this.message(causeOrReason, optionsOrParentOrPlace, origin); - message.fatal = true; - throw message - } - info(causeOrReason, optionsOrParentOrPlace, origin) { - const message = this.message(causeOrReason, optionsOrParentOrPlace, origin); - message.fatal = undefined; - return message - } - message(causeOrReason, optionsOrParentOrPlace, origin) { - const message = new VFileMessage( - causeOrReason, - optionsOrParentOrPlace, - origin - ); - if (this.path) { - message.name = this.path + ':' + message.name; - message.file = this.path; - } - message.fatal = false; - this.messages.push(message); - return message - } - toString(encoding) { - if (this.value === undefined) { - return '' - } - if (typeof this.value === 'string') { - return this.value - } - const decoder = new TextDecoder(encoding || undefined); - return decoder.decode(this.value) - } -} -function assertPart(part, name) { - if (part && part.includes(path$1.sep)) { - throw new Error( - '`' + name + '` cannot be a path: did not expect `' + path$1.sep + '`' - ) - } -} -function assertNonEmpty(part, name) { - if (!part) { - throw new Error('`' + name + '` cannot be empty') - } -} -function assertPath(path, name) { - if (!path) { - throw new Error('Setting `' + name + '` requires `path` to be set too') - } -} -function isUint8Array$1(value) { - return Boolean( - value && - typeof value === 'object' && - 'byteLength' in value && - 'byteOffset' in value - ) -} - function read(description, options, callback) { const file = toVFile(description); if (!callback && typeof options === 'function') { @@ -27766,7 +24587,7 @@ function createAncestorsLines(state, ancestors) { typeof value.name === 'string' ? value.name : undefined; - const position = stringifyPosition$2(node.position); + const position = stringifyPosition(node.position); lines.push( ' at ' + state.yellow + @@ -27885,7 +24706,7 @@ function createMessageLine(state, message) { } const place = message.place || message.position; const row = [ - stringifyPosition$2(place), + stringifyPosition(place), (label === 'error' ? state.red : state.yellow) + label + state.defaultColor, formatReason(state, reason), message.ruleId || '', diff --git a/tools/lint-md/package-lock.json b/tools/lint-md/package-lock.json index eaaffa45487280..c2611fced9a7ef 100644 --- a/tools/lint-md/package-lock.json +++ b/tools/lint-md/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "remark-parse": "^11.0.0", - "remark-preset-lint-node": "^5.0.0", + "remark-preset-lint-node": "^5.0.2", "remark-stringify": "^11.0.0", "to-vfile": "^8.0.0", "unified": "^11.0.4", @@ -18,21 +18,19 @@ "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", - "rollup": "^4.14.2", + "rollup": "^4.14.3", "rollup-plugin-cleanup": "^3.2.1" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -55,9 +53,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -80,9 +77,8 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -101,9 +97,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz", - "integrity": "sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.3.tgz", + "integrity": "sha512-X9alQ3XM6I9IlSlmC8ddAvMSyG1WuHk5oUnXGw+yUBs3BFoTizmG1La/Gr8fVJvDWAq+zlYTZ9DBgrlKRVY06g==", "cpu": [ "arm" ], @@ -114,9 +110,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.2.tgz", - "integrity": "sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.3.tgz", + "integrity": "sha512-eQK5JIi+POhFpzk+LnjKIy4Ks+pwJ+NXmPxOCSvOKSNRPONzKuUvWE+P9JxGZVxrtzm6BAYMaL50FFuPe0oWMQ==", "cpu": [ "arm64" ], @@ -127,22 +123,21 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.2.tgz", - "integrity": "sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==", + "version": "4.14.3", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.2.tgz", - "integrity": "sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.3.tgz", + "integrity": "sha512-0IMAO21axJeNIrvS9lSe/PGthc8ZUS+zC53O0VhF5gMxfmcKAP4ESkKOCwEi6u2asUrt4mQv2rjY8QseIEb1aw==", "cpu": [ "x64" ], @@ -153,9 +148,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.2.tgz", - "integrity": "sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.3.tgz", + "integrity": "sha512-ge2DC7tHRHa3caVEoSbPRJpq7azhG+xYsd6u2MEnJ6XzPSzQsTKyXvh6iWjXRf7Rt9ykIUWHtl0Uz3T6yXPpKw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.14.3.tgz", + "integrity": "sha512-ljcuiDI4V3ySuc7eSk4lQ9wU8J8r8KrOUvB2U+TtK0TiW6OFDmJ+DdIjjwZHIw9CNxzbmXY39wwpzYuFDwNXuw==", "cpu": [ "arm" ], @@ -166,9 +174,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.2.tgz", - "integrity": "sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.3.tgz", + "integrity": "sha512-Eci2us9VTHm1eSyn5/eEpaC7eP/mp5n46gTRB3Aar3BgSvDQGJZuicyq6TsH4HngNBgVqC5sDYxOzTExSU+NjA==", "cpu": [ "arm64" ], @@ -179,9 +187,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.2.tgz", - "integrity": "sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.3.tgz", + "integrity": "sha512-UrBoMLCq4E92/LCqlh+blpqMz5h1tJttPIniwUgOFJyjWI1qrtrDhhpHPuFxULlUmjFHfloWdixtDhSxJt5iKw==", "cpu": [ "arm64" ], @@ -192,9 +200,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.2.tgz", - "integrity": "sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.3.tgz", + "integrity": "sha512-5aRjvsS8q1nWN8AoRfrq5+9IflC3P1leMoy4r2WjXyFqf3qcqsxRCfxtZIV58tCxd+Yv7WELPcO9mY9aeQyAmw==", "cpu": [ "ppc64" ], @@ -205,9 +213,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.2.tgz", - "integrity": "sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.3.tgz", + "integrity": "sha512-sk/Qh1j2/RJSX7FhEpJn8n0ndxy/uf0kI/9Zc4b1ELhqULVdTfN6HL31CDaTChiBAOgLcsJ1sgVZjWv8XNEsAQ==", "cpu": [ "riscv64" ], @@ -218,9 +226,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.2.tgz", - "integrity": "sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.3.tgz", + "integrity": "sha512-jOO/PEaDitOmY9TgkxF/TQIjXySQe5KVYB57H/8LRP/ux0ZoO8cSHCX17asMSv3ruwslXW/TLBcxyaUzGRHcqg==", "cpu": [ "s390x" ], @@ -231,9 +239,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.2.tgz", - "integrity": "sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.3.tgz", + "integrity": "sha512-8ybV4Xjy59xLMyWo3GCfEGqtKV5M5gCSrZlxkPGvEPCGDLNla7v48S662HSGwRd6/2cSneMQWiv+QzcttLrrOA==", "cpu": [ "x64" ], @@ -244,9 +252,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.2.tgz", - "integrity": "sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.3.tgz", + "integrity": "sha512-s+xf1I46trOY10OqAtZ5Rm6lzHre/UiLA1J2uOhCFXWkbZrJRkYBPO6FhvGfHmdtQ3Bx793MNa7LvoWFAm93bg==", "cpu": [ "x64" ], @@ -257,9 +265,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.2.tgz", - "integrity": "sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.3.tgz", + "integrity": "sha512-+4h2WrGOYsOumDQ5S2sYNyhVfrue+9tc9XcLWLh+Kw3UOxAvrfOrSMFon60KspcDdytkNDh7K2Vs6eMaYImAZg==", "cpu": [ "arm64" ], @@ -270,9 +278,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.2.tgz", - "integrity": "sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.3.tgz", + "integrity": "sha512-T1l7y/bCeL/kUwh9OD4PQT4aM7Bq43vX05htPJJ46RTI4r5KNt6qJRzAfNfM+OYMNEVBWQzR2Gyk+FXLZfogGw==", "cpu": [ "ia32" ], @@ -283,9 +291,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.2.tgz", - "integrity": "sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz", + "integrity": "sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA==", "cpu": [ "x64" ], @@ -297,71 +305,56 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "version": "3.0.4", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@types/unist": "*" } }, - "node_modules/@types/hast/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/@types/mdast": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/ms": { "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/supports-color": { "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.3.tgz", - "integrity": "sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==" + "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + "license": "MIT" }, "node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -371,13 +364,11 @@ }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "license": "Python-2.0" }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -385,24 +376,21 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -412,8 +400,7 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -421,8 +408,31 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -430,19 +440,24 @@ }, "node_modules/co": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==" + "license": "MIT" + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -457,8 +472,7 @@ }, "node_modules/decode-named-character-reference": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -469,25 +483,22 @@ }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", "dependencies": { "dequal": "^2.0.0" }, @@ -496,28 +507,17 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "license": "MIT" }, "node_modules/emoji-regex": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -527,27 +527,22 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -558,18 +553,16 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -586,9 +579,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -598,9 +590,8 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -608,14 +599,31 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -630,15 +638,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -651,9 +659,8 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -661,16 +668,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -680,18 +701,16 @@ }, "node_modules/is-reference": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/js-cleanup": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", - "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", "dev": true, + "license": "MIT", "dependencies": { "magic-string": "^0.25.7", "perf-regexes": "^1.0.1", @@ -703,17 +722,15 @@ }, "node_modules/js-cleanup/node_modules/magic-string": { "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -721,18 +738,9 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -740,8 +748,7 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -750,56 +757,54 @@ } }, "node_modules/magic-string": { - "version": "0.30.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", - "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", + "version": "0.30.10", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" } }, "node_modules/markdown-table": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/mdast-comment-marker": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.2.tgz", - "integrity": "sha512-HED3ezseRVkBzZ0uK4q6RJMdufr/2p3VfVZstE3H1N9K8bwtspztWo6Xd7rEatuGNoCXaBna8oEqMwUn0Ve1bw==", + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-mdx-expression": "^1.1.0" + "@types/mdast": "^4.0.0", + "mdast-util-mdx-expression": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-comment-marker/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-comment-marker/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", @@ -813,8 +818,7 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", @@ -836,8 +840,7 @@ }, "node_modules/mdast-util-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", @@ -854,8 +857,7 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "ccount": "^2.0.0", @@ -870,8 +872,7 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.1.0", @@ -886,8 +887,7 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -900,8 +900,7 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -916,8 +915,7 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -930,107 +928,109 @@ } }, "node_modules/mdast-util-heading-style": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.1.tgz", - "integrity": "sha512-0L5rthU4xKDVbw+UQ7D8Y8xOEsX4JXZvemWoEAsL+WAaeSH+TvVVwFnTb3G/OrjyP4VYQULoNWU+PdZfkmNu4A==", + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "@types/mdast": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-heading-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-heading-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "version": "2.0.0", + "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.2", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-markdown": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", - "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", "zwitch": "^2.0.0" }, "funding": { @@ -1038,22 +1038,19 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0" + "@types/mdast": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "node_modules/micromark": { + "version": "4.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1064,30 +1061,29 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1098,110 +1094,154 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { "type": "OpenCollective", "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "node_modules/micromark-factory-label": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1212,17 +1252,16 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "node_modules/micromark-factory-space": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1233,15 +1272,14 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "node_modules/micromark-factory-title": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1252,14 +1290,16 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1270,16 +1310,16 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "node_modules/micromark-util-character": { + "version": "2.1.0", "funding": [ { "type": "GitHub Sponsors", @@ -1290,15 +1330,14 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "node_modules/micromark-util-chunked": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1309,14 +1348,67 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1327,17 +1419,16 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "node_modules/micromark-util-encode": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1347,12 +1438,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1362,12 +1452,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1378,14 +1467,13 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-symbol": "^1.0.0" + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1396,14 +1484,13 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-types": "^1.0.0" + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1414,16 +1501,15 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "node_modules/micromark-util-subtokenize": { + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -1434,17 +1520,16 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "node_modules/micromark-util-symbol": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1454,12 +1539,11 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, - "node_modules/mdast-util-mdx-expression/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "node_modules/micromark-util-types": { + "version": "2.0.0", "funding": [ { "type": "GitHub Sponsors", @@ -1469,3985 +1553,680 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", "dependencies": { - "@types/unist": "^2.0.0" + "brace-expansion": "^2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "wrappy": "1" } }, - "node_modules/mdast-util-mdx-expression/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/parse-entities": { + "version": "4.0.1", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", - "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", - "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/perf-regexes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", - "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", - "dev": true, - "engines": { - "node": ">=6.14" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.2.tgz", - "integrity": "sha512-m9e/aPlh7tsvfJfj8tPxrQzD6oEdb9Foko+Ya/6OwUP9EoGMfehv1Qtv26W1DoH58Wn8rT8CD+KuprTWscMmIA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.1.2.tgz", - "integrity": "sha512-5DOrFsZd5dXqA4p/VZvWSrqIWNFbBXjX7IV/FkVkxlNhNF/0FMf/4v8x1I2W3mzaZ7yDsWS/egpZnmligq1ckQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.1.2.tgz", - "integrity": "sha512-5ITz+1cCuJ3Jv/Q7rKgDEucCOnIgjWDnSHPJA1tb4TI/D316h+ALbDhZIpP8gyfAm6sBAh3Pwz9XZJN2uJB5UQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.1.2.tgz", - "integrity": "sha512-8uaHAm4bSqB7XpnecLRObe00Lj9eoHiecV+44CfJeWyoo50cTPR/hIMfsMtDxsNt4LZP+6oCV9z+vACJqDv8Hg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.1.2.tgz", - "integrity": "sha512-3wsWmzzdyEsB9sOzBOf46TSkwwVKXN2JpTEQb6feN0Tl6Vg75F7T9MHqMz7aqk/56bOXSxUzdpXDscGBhziLRA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-code-block-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.1.2.tgz", - "integrity": "sha512-l058jAKfZfCOmlbIzoTll+CrZm9Bh42ZVCHcODPSZC8Yx4terCKgIoks+RWJDEdUbEw0YQoYvPc59ZVmp3BIew==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-definition-spacing/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.2.tgz", - "integrity": "sha512-yh4m3dlPmRsqM/BFhpqHYfrmBvFQ+D5dZZKDDYP2rf3YEoXlEVt8T8lWQueTTSxcq6yXAqL/XQL/iqqUHlLcHw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.1.2.tgz", - "integrity": "sha512-6XNqjOuhT+0c7Q/22aCsMz61ne9g8HRpYF79EXQPdbzYa+PcfPXMiQKStONY3PfC8OE2/3WXI2zcs8w9x+8+VQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-file-extension": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.1.2.tgz", - "integrity": "sha512-Nq54F5R7F1gyj/IMW6SvkAbVNrH+p38WK3//KCoZLDUYFrH0oXgXXFGHi9CT/O0VEopW+bWJfTn8YAJRs0qI5Q==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-file-extension/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-file-extension/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-file-extension/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.1.2.tgz", - "integrity": "sha512-3O3JT6xqlrgq+UjhMPxshgMtwXn99w0BEO9JwbDls49N0XCu0n22Pq1n6X3tEVzskPLo3YYyVYfW2Z2C2rneKQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-final-definition/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-final-definition/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-newline": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.1.2.tgz", - "integrity": "sha512-K0FdPGPyEB94PwNgopwVJFE8oRWi7IhY2ycXFVAMReI51el7EHB8F1gX14tB6p6zyGy6mUh69bCVU9mMTNeOUg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-final-newline/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-final-newline/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-final-newline/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-first-heading-level/-/remark-lint-first-heading-level-3.1.2.tgz", - "integrity": "sha512-uSgDMAKOolDcxfJwQU+iJK2Vbz2ZIzBAjQiN0f+9O/7XwrAH5IuVQH60w7chuxVrauVHmd1rbjmvzXVq8R30VQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-first-heading-level/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-first-heading-level/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.1.2.tgz", - "integrity": "sha512-HaW0xsl3TI7VFAqGWWcZtPqyz0NWu19KKjSO7OGFTUJU4S9YiRnhIxmSFM0ZLSsVAynE+dhzVKa8U7dOpWDcOg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.2.tgz", - "integrity": "sha512-0RkcRPV/H2bPFgeInzBkK1cWUwtFTm83I+Db/Z5tDY02GzKOosHLvxtJyj/1391/opAH1LYbHtHWffir99IUgw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-heading-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-heading-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.1.2.tgz", - "integrity": "sha512-WgU5nooqIEm6f35opcbHKBzWrdFJA3XcyTfB3nv/v0KX43/h6qFGmmMJ5kEiaFExuQp3dZSdatWuY0YZ9YRbUg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.1.2.tgz", - "integrity": "sha512-tkrra1pxZVE4OVJGfN435u/v0ljruXU+dHzWiKDYeifquD4aWhJxvSApu7+FbE098D/4usVXgMxwFkNhrpZcSQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-list-item-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.1.3.tgz", - "integrity": "sha512-TA7IE+0c8agRm1k7JZr7ZZFiL44JMBAj1KlMxSTACBuebdPJe7IPaLIQga10bnz75jfWMzSiRURMFHo4lt3kdw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.1.2.tgz", - "integrity": "sha512-QPbqsrt7EfpSWqTkZJ9tepabPIhBDlNqZkuxxMQYD0OQ2N+tHDUq3zE1JxI5ts1V9o/mWApgySocqGd3jlcKmQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.1.3.tgz", - "integrity": "sha512-yU3jH6UMHvaxX3DPBen+7CoPiCcqJ4BeteyOKeKX+tKWCWKILpiz+TVToRbeLnWO4IvFNnSRFMSXmcWSDdbY4w==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.1.2.tgz", - "integrity": "sha512-vi0nXA7p+pjQOorZOkr9E+QDhG74JAdbzqglWPrWWNI3z2rUYWYHTNSyWJbwEXaIIcev1ZAw8SCAOis5MNm+pA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-articles": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.1.2.tgz", - "integrity": "sha512-kM4vwBkne7f9euDKsuyxTtrsiafjH+KOwu8ZmuSVWh5U+u0EMcPyN5fxfaQIW+5FkrJA1jwnRu7ciXJBJt74Og==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-file-name-articles/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.1.2.tgz", - "integrity": "sha512-gw06jaaFwBR3s+3E2kJlv+E7rAzS7Nj+MFU7TViwbsYnR7PA96htLVDCjClyNUE7JHUNcv93HdLm8ykg8kRyNA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.1.2.tgz", - "integrity": "sha512-VrbHg25Oo9k/bNbS7ye1X7F6ER4uZSubO+t5DHJ4WZ6iVbNtBar/JwzVelY1YxUAutv42OvHfuveh4vKlcNgVA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.1.2.tgz", - "integrity": "sha512-TTxFsm1f4ZHFxZQCuz7j0QK4RvP6oArTiwazKLr16yaZe1608ypogMek4A30j2xX8WuO9+2uBzLXCY5OBo5x5Q==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.1.2.tgz", - "integrity": "sha512-XFoSebfsYV6EFYRCYkCzSw6xxgltN5l3aPH+UfCk/0geMnl3DrCQjbQt9qhxQzBSBa4gA91CGs2DRI5Xxbwzig==", - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.2.tgz", - "integrity": "sha512-dGyhWsiqCZS3Slob0EVBUfsFBbdpMIBCvb56LlCgaHbnLsnNYx8PpF/wA5CgsN8BXIbXfRpyPB5cIJwIq5taYg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-inline-padding/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-inline-padding/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.1.2.tgz", - "integrity": "sha512-4tV9JGLKxAMFSuWDMOqLozkFJ3HyRvhzgrPrxASoziaml23m7UXAozk5dkIrFny1cN2oG988Z8tORxX2FL1Ilw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-literal-urls/node_modules/mdast-util-to-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", - "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", - "dependencies": { - "@types/mdast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.1.2.tgz", - "integrity": "sha512-9rJSsrwdzwKmtuloBjJobLzjGL7Lgtk3+vMNUyuH9z/nBfkUCN3qxn3Nt9AxL+wwSAsHV6e74W+W2S1ohBLt6A==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.2.tgz", - "integrity": "sha512-np2MDEhXHviXhbQFjnC1QYv5/fxCV1cIHfGMoJpqiW7Zcu/UGCOo5TE3XswZH4ukHZJ65c3X2A6qfLDW+ur3CQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.1.2.tgz", - "integrity": "sha512-NX4XJFPyDeJJ77pmETxRj4oM/zayf7Lmn/O87HgExBkQIPz2NYbDeKD8QEyliLaV/oKA2rQufpzuFw55xa1Tww==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.1.2.tgz", - "integrity": "sha512-/9iPN7FLKaaIzw4tLWKu7Rx0wAP7E2EuzIeentQlkY0rO/mMHipmT3IlgiebsAInKagzTY6TNFoG1rq2VnaCcA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/@types/unist": { + "node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-no-table-indentation": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.1.2.tgz", - "integrity": "sha512-5lkO+Yrtni/CDMZi7mlwbB2zzRQLH94DesboXg51aO2UfZlSn5dZNhmN5wkyCU2AiApUhlFNbxfKMHOWFPLdog==", - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "license": "MIT" }, - "node_modules/remark-lint-no-table-indentation/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-table-indentation/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" }, - "node_modules/remark-lint-no-table-indentation/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/perf-regexes": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.14" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/pluralize": { + "version": "8.0.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/quotation": { + "version": "2.0.3", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-no-tabs": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.1.2.tgz", - "integrity": "sha512-PQQmRpGHRW9tMnAXtlQbMke8byIJu9hlotCH6pJZPO4FodpXvD4JW5EMM3BmO0JQDZsQWrx3qfqxCEMxrj8Qbg==", + "node_modules/remark-gfm": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-tabs/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-tabs/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint": { + "version": "10.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "remark-message-control": "^8.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-trailing-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-trailing-spaces/-/remark-lint-no-trailing-spaces-2.0.1.tgz", - "integrity": "sha512-cj8t+nvtO6eAY2lJC7o5du8VeOCK13XiDUHL4U6k5aw6ZLr3EYWbQ/rNc6cr60eHkh5Ldm09KiZjV3CWpxqJ0g==", - "dependencies": { - "unified-lint-rule": "^1.0.2" - } - }, - "node_modules/remark-lint-no-trailing-spaces/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "wrapped": "^1.0.1" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.2.1.tgz", - "integrity": "sha512-HdNg5b2KiuNplcuVvRtsrUiROw557kAG1CiZYB7jQrrVWFgd86lKTa3bDiywe+87dGrGmHd3qQ28eZYTuHz2Nw==", + "node_modules/remark-lint-checkbox-character-style": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-undefined-references/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/remark-lint-no-undefined-references/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/remark-lint-no-undefined-references/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-checkbox-content-indent": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-code-block-style": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-definition-spacing": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-fenced-code-flag": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.1.2.tgz", - "integrity": "sha512-bOcaJAnjKxT3kASFquUA3fO9xem9wZhVqt8TbqjA84+G4n40qjaLXDs/4vq73aMsSde73K0f3j1u0pMe7et8yQ==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-file-extension": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-final-definition": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-final-newline": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-first-heading-level": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.2.tgz", - "integrity": "sha512-62iVE/YQsA0Azaqt8yAJWPplWLS47kDLjXeC2PlRIAzCqbNt9qH3HId8vZ15QTSrp8rHmJwrCMdcqV6AZUi7gQ==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-heading-style": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-heading-style": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-list-item-bullet-indent": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-list-item-indent": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-maximum-line-length": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-prohibited-strings/-/remark-lint-prohibited-strings-3.1.0.tgz", - "integrity": "sha512-zwfDDdYl7ye0gEHcwhdkv1ZGXj1ibw4gnLLZkkvySnDdTz2tshY3fOJLY5NikbVseaIRVGOr5qa+8J9WNQT/fA==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.1", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.1" - } - }, - "node_modules/remark-lint-prohibited-strings/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.1.2.tgz", - "integrity": "sha512-0CsX2XcX9pIhAP5N7Y8mhYXp3/Ld+NvxXY1p0LHAq0NZu17UsZLuegvx/s25uFbQs08DcmSqyKnepU9qGGqmTQ==", + "node_modules/remark-lint-no-file-name-articles": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-rule-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-rule-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-no-heading-content-indent": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-no-heading-indent": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.1.2.tgz", - "integrity": "sha512-U/g4wngmiI0Q6WBRQG6pZxnDS33Wt/0QYA3+KNFBDykoi1vXsDEorIqy3dEag9z6XHwcMvFDsff6VRUhaOJWQg==", + "node_modules/remark-lint-no-literal-urls": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-strong-marker/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-strong-marker/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-no-multiple-toplevel-headings": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-no-shell-dollars": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-no-shortcut-reference-link": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.1.3.tgz", - "integrity": "sha512-N9xtnS6MG/H3srAMjqqaF26A7socr87pIgt64dr5rxoSbDRWRPChGQ8y7wKyV8VeyRNF37e3E5KB3bQVqjSYaQ==", + "node_modules/remark-lint-no-table-indentation": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-table-cell-padding/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-table-cell-padding/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-no-tabs": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-no-trailing-spaces": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "unified-lint-rule": "^1.0.2" + } + }, + "node_modules/remark-lint-no-trailing-spaces/node_modules/unified-lint-rule": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "wrapped": "^1.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-no-undefined-references": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-no-unused-definitions": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.1.2.tgz", - "integrity": "sha512-Ex2cJDXA0hdD9CC5Nu0p3K5LP+AhzPvk4sIOSbevCTSRyCS/SkNk4CQ6pwWBxuPVuHQUkqXkT8lgu8wwr/9A3A==", + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "node_modules/remark-lint-prohibited-strings": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2" + "escape-string-regexp": "^5.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile-location": "^5.0.1" } }, - "node_modules/remark-lint-table-pipes/node_modules/@types/unist": { + "node_modules/remark-lint-prohibited-strings/node_modules/@types/unist": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + "license": "MIT" }, - "node_modules/remark-lint-table-pipes/node_modules/unified": { + "node_modules/remark-lint-prohibited-strings/node_modules/unified": { "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", @@ -5462,204 +2241,147 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-prohibited-strings/node_modules/unified-lint-rule": { + "version": "2.1.2", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-prohibited-strings/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.2.tgz", - "integrity": "sha512-JFiyB4ZprJGGndCaFB8FssXd48m4Kh+CUqzNgu3lBLEiW8dEAGRlD9M2AzyyA+Q29WJP/FntDCbP22DeON91UA==", + "node_modules/remark-lint-prohibited-strings/node_modules/vfile": { + "version": "5.3.7", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-prohibited-strings/node_modules/vfile-message": { + "version": "3.1.4", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "unist-util-stringify-position": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/remark-lint-rule-style": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "node_modules/remark-lint-strong-marker": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/remark-lint-table-cell-padding": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-lint/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-lint/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-lint-table-pipes": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", - "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==", + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-message-control/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-message-control/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-message-control/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/remark-message-control": { + "version": "8.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/mdast": "^4.0.0", + "mdast-comment-marker": "^3.0.0", + "unified-message-control": "^5.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", @@ -5668,8 +2390,7 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-from-markdown": "^2.0.0", @@ -5682,103 +2403,68 @@ } }, "node_modules/remark-preset-lint-node": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-5.0.0.tgz", - "integrity": "sha512-E8q3jgNVuhm738oQV7dLNEukO1JVIgYuNoNdn4hliVYdrjJY3zJdsntJbUzZqMmBopcMAy3HwOwwHWz7C0Qsvw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/remark-preset-lint-node/-/remark-preset-lint-node-5.0.2.tgz", + "integrity": "sha512-yuPSpd9hDqX8ZqCMem+EX2CJvuu7zzjoZRL65NGkJeg4wrxiv7ztrRZ8WgQ0lKV0JVG6h541QHG1gtzd6E3Eig==", "dependencies": { "js-yaml": "^4.1.0", "remark-gfm": "^4.0.0", - "remark-lint-blockquote-indentation": "^3.1.2", - "remark-lint-checkbox-character-style": "^4.1.2", - "remark-lint-checkbox-content-indent": "^4.1.2", - "remark-lint-code-block-style": "^3.1.2", - "remark-lint-definition-spacing": "^3.1.2", - "remark-lint-fenced-code-flag": "^3.1.2", - "remark-lint-fenced-code-marker": "^3.1.2", - "remark-lint-file-extension": "^2.1.2", - "remark-lint-final-definition": "^3.1.2", - "remark-lint-first-heading-level": "^3.1.2", - "remark-lint-heading-style": "^3.1.2", - "remark-lint-list-item-indent": "^3.1.2", - "remark-lint-maximum-line-length": "^3.1.3", - "remark-lint-no-consecutive-blank-lines": "^4.1.3", - "remark-lint-no-file-name-articles": "^2.1.2", - "remark-lint-no-file-name-consecutive-dashes": "^2.1.2", - "remark-lint-no-file-name-outer-dashes": "^2.1.2", - "remark-lint-no-heading-indent": "^4.1.2", - "remark-lint-no-multiple-toplevel-headings": "^3.1.2", - "remark-lint-no-shell-dollars": "^3.1.2", - "remark-lint-no-table-indentation": "^4.1.2", - "remark-lint-no-tabs": "^3.1.2", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-checkbox-character-style": "^5.0.0", + "remark-lint-checkbox-content-indent": "^5.0.0", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-definition-spacing": "^4.0.0", + "remark-lint-fenced-code-flag": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-file-extension": "^3.0.0", + "remark-lint-final-definition": "^4.0.1", + "remark-lint-first-heading-level": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", + "remark-lint-maximum-line-length": "^4.0.1", + "remark-lint-no-consecutive-blank-lines": "^5.0.0", + "remark-lint-no-file-name-articles": "^3.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^3.0.0", + "remark-lint-no-file-name-outer-dashes": "^3.0.0", + "remark-lint-no-heading-indent": "^5.0.0", + "remark-lint-no-multiple-toplevel-headings": "^4.0.0", + "remark-lint-no-shell-dollars": "^4.0.0", + "remark-lint-no-table-indentation": "^5.0.0", + "remark-lint-no-tabs": "^4.0.0", "remark-lint-no-trailing-spaces": "^2.0.1", - "remark-lint-prohibited-strings": "^3.1.0", - "remark-lint-rule-style": "^3.1.2", - "remark-lint-strong-marker": "^3.1.2", - "remark-lint-table-cell-padding": "^4.1.3", - "remark-lint-table-pipes": "^4.1.2", - "remark-lint-unordered-list-marker-style": "^3.1.2", - "remark-preset-lint-recommended": "^6.1.3", + "remark-lint-prohibited-strings": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "remark-lint-table-pipes": "^5.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.0", + "remark-preset-lint-recommended": "^7.0.0", "semver": "^7.5.4", - "unified-lint-rule": "^2.1.2", + "unified-lint-rule": "^3.0.0", "unist-util-visit": "^5.0.0" }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/remark-preset-lint-recommended": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.1.3.tgz", - "integrity": "sha512-DGjbeP2TsFmQeJflUiIvJWAOs1PxJt7SG3WQyMxOppkRr/up+mxWVkuv+6AUuaR0EsuaaFGz7WmZM5TrSSFWJw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-final-newline": "^2.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-list-item-bullet-indent": "^4.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-duplicate-definitions": "^3.0.0", - "remark-lint-no-heading-content-indent": "^4.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-undefined-references": "^4.0.0", - "remark-lint-no-unused-definitions": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-preset-lint-recommended/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/remark-preset-lint-recommended/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/remark-preset-lint-recommended/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/remark-preset-lint-recommended": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "remark-lint": "^10.0.0", + "remark-lint-final-newline": "^3.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-list-item-bullet-indent": "^5.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-duplicate-definitions": "^4.0.0", + "remark-lint-no-heading-content-indent": "^5.0.0", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-shortcut-reference-link": "^4.0.0", + "remark-lint-no-undefined-references": "^5.0.0", + "remark-lint-no-unused-definitions": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", @@ -5787,8 +2473,7 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-to-markdown": "^2.0.0", @@ -5801,9 +2486,8 @@ }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -5817,9 +2501,9 @@ } }, "node_modules/rollup": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.2.tgz", - "integrity": "sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.3.tgz", + "integrity": "sha512-ag5tTQKYsj1bhrFC9+OEWqb5O6VYgtQDO9hPDBMmIbePwhfSr+ExlcU741t8Dhw5DkPCQf6noz0jb36D6W9/hw==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -5832,29 +2516,29 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.2", - "@rollup/rollup-android-arm64": "4.14.2", - "@rollup/rollup-darwin-arm64": "4.14.2", - "@rollup/rollup-darwin-x64": "4.14.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.2", - "@rollup/rollup-linux-arm64-gnu": "4.14.2", - "@rollup/rollup-linux-arm64-musl": "4.14.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.2", - "@rollup/rollup-linux-riscv64-gnu": "4.14.2", - "@rollup/rollup-linux-s390x-gnu": "4.14.2", - "@rollup/rollup-linux-x64-gnu": "4.14.2", - "@rollup/rollup-linux-x64-musl": "4.14.2", - "@rollup/rollup-win32-arm64-msvc": "4.14.2", - "@rollup/rollup-win32-ia32-msvc": "4.14.2", - "@rollup/rollup-win32-x64-msvc": "4.14.2", + "@rollup/rollup-android-arm-eabi": "4.14.3", + "@rollup/rollup-android-arm64": "4.14.3", + "@rollup/rollup-darwin-arm64": "4.14.3", + "@rollup/rollup-darwin-x64": "4.14.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", + "@rollup/rollup-linux-arm-musleabihf": "4.14.3", + "@rollup/rollup-linux-arm64-gnu": "4.14.3", + "@rollup/rollup-linux-arm64-musl": "4.14.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", + "@rollup/rollup-linux-riscv64-gnu": "4.14.3", + "@rollup/rollup-linux-s390x-gnu": "4.14.3", + "@rollup/rollup-linux-x64-gnu": "4.14.3", + "@rollup/rollup-linux-x64-musl": "4.14.3", + "@rollup/rollup-win32-arm64-msvc": "4.14.3", + "@rollup/rollup-win32-ia32-msvc": "4.14.3", + "@rollup/rollup-win32-x64-msvc": "4.14.3", "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-cleanup": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", - "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", "dev": true, + "license": "MIT", "dependencies": { "js-cleanup": "^1.2.0", "rollup-pluginutils": "^2.8.2" @@ -5868,34 +2552,20 @@ }, "node_modules/rollup-pluginutils": { "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^0.6.1" } }, "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5908,29 +2578,32 @@ }, "node_modules/skip-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", - "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.2" } }, "node_modules/sliced": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" + "license": "MIT" }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/string-width": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", @@ -5943,10 +2616,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -5959,8 +2643,7 @@ }, "node_modules/supports-color": { "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -5970,9 +2653,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5982,8 +2664,7 @@ }, "node_modules/to-vfile": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-8.0.0.tgz", - "integrity": "sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==", + "license": "MIT", "dependencies": { "vfile": "^6.0.0" }, @@ -5992,37 +2673,9 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/to-vfile/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/to-vfile/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6030,8 +2683,7 @@ }, "node_modules/unified": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", @@ -6047,37 +2699,13 @@ } }, "node_modules/unified-lint-rule": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.2.tgz", - "integrity": "sha512-JWudPtRN7TLFHVLEVZ+Rm8FUb6kCAtHxEXFgBGDxRSdNMnGyTU5zyYvduHSF/liExlFB3vdFvsAHnNVE/UjAwA==", - "dependencies": { - "@types/unist": "^2.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified-lint-rule/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/unified-lint-rule/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "version": "3.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", + "@types/unist": "^3.0.0", "trough": "^2.0.0", - "vfile": "^5.0.0" + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", @@ -6085,73 +2713,16 @@ } }, "node_modules/unified-message-control": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", - "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified-message-control/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/unified-message-control/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified-message-control/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "version": "5.0.0", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", + "devlop": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", "vfile-message": "^4.0.0" }, "funding": { @@ -6159,32 +2730,20 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unified/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-generated": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", - "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "node_modules/unist-util-position": { + "version": "5.0.0", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -6193,27 +2752,21 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-position": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", - "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-position/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" }, @@ -6224,8 +2777,7 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -6238,8 +2790,7 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -6249,32 +2800,13 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "version": "6.0.1", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", @@ -6282,47 +2814,23 @@ } }, "node_modules/vfile-location": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", - "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "version": "5.0.2", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-location/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, "node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "version": "4.0.2", + "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", @@ -6331,8 +2839,7 @@ }, "node_modules/vfile-reporter": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.1.tgz", - "integrity": "sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==", + "license": "MIT", "dependencies": { "@types/supports-color": "^8.0.0", "string-width": "^6.0.0", @@ -6348,37 +2855,9 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-reporter/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-reporter/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vfile-sort": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz", - "integrity": "sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==", + "license": "MIT", "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" @@ -6388,37 +2867,9 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-sort/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-sort/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vfile-statistics": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz", - "integrity": "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==", + "license": "MIT", "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" @@ -6428,54 +2879,9 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-statistics/node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-statistics/node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/wrapped": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g==", + "license": "MIT", "dependencies": { "co": "3.1.0", "sliced": "^1.0.1" @@ -6483,19 +2889,16 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" diff --git a/tools/lint-md/package.json b/tools/lint-md/package.json index ea456ae37988a3..1d61f24e376f9a 100644 --- a/tools/lint-md/package.json +++ b/tools/lint-md/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "remark-parse": "^11.0.0", - "remark-preset-lint-node": "^5.0.0", + "remark-preset-lint-node": "^5.0.2", "remark-stringify": "^11.0.0", "to-vfile": "^8.0.0", "unified": "^11.0.4", @@ -16,7 +16,7 @@ "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", - "rollup": "^4.14.2", + "rollup": "^4.14.3", "rollup-plugin-cleanup": "^3.2.1" } }